2012-06-10 2 views
3

Я хочу отправить подвью из моего супер UIView с анимацией. Он отлично работает, но когда я попытался изменить размер во время анимации, любой UILabel, который у меня в моем подломе внезапно становится слишком маленьким , здесь является частью моего кодаИзменение размера UILabel внезапно, когда родительский UIView animate

-(void)pushOutScreen:(UIViewController *)pop{ 
    [UIView animateWithDuration:1 
         delay:0.0 
        options: UIViewAnimationTransitionFlipFromLeft 
       animations:^{ 

        CGRect frame = pop.view.frame; 
        frame.size.height = frame.size.height /4; 
        frame.size.width = frame.size.width /4; 
        frame.origin.x = -500; 
        frame.origin.y = 318; 

        pop.view.frame = frame; 
       } 
       completion:^(BOOL finished){ 
        NSLog(@"Done!"); 
       }]; 
} 

примечание: любой UIButton или UIImage, что находится внутри моего подтаблицы анимированный хорошо, но у меня есть только проблема с UILabel.

ответ

2

UIView анимация не является хорошим вариантом для этого, вместо этого попробуйте CAKeyframeAnimation. Это пример кода для масштабирования UIView:

- (void) scaleView:(UIView *)popView { 
    CAKeyframeAnimation *animation = [CAKeyframeAnimation 
            animationWithKeyPath:@"transform"]; 
    animation.delegate = self; 

    // CATransform3DMakeScale has 3 parameter (x,y,z) 
    CATransform3D scale1 = CATransform3DMakeScale(1.0, 1.0, 1); 
    CATransform3D scale2 = CATransform3DMakeScale(0.2, 0.2, 1); 

    NSArray *frameValues = [NSArray arrayWithObjects: 
         [NSValue valueWithCATransform3D:scale1], 
         [NSValue valueWithCATransform3D:scale2], 
         nil]; 
    [animation setValues:frameValues]; 

    NSArray *frameTimes = [NSArray arrayWithObjects: 
         [NSNumber numberWithFloat:0.0], 
         [NSNumber numberWithFloat:1.0], 
         nil];  
    [animation setKeyTimes:frameTimes]; 

    animation.fillMode = kCAFillModeForwards; 
    animation.removedOnCompletion = NO; 
    animation.duration = 1.0; 

    [popView.layer addAnimation:animation forKey:@"popup"]; 
} 

вы можете использовать это после того, как вы добавите UIView, как subView, то вы можете вызвать этот метод, как накипь его. для выталкивания вспомогательного представления с помощью этого метода вам необходимо использовать removeFromSubView после завершения анимации. для зная, что, когда он закончил использовать

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag 
{ 
    [subView removeFromSuperview]; 
} 

Я надеюсь, что это будет полезно!

+0

Thank Dude, наконец, кто-то ответил на мою проблему. решение, которое вы написали, было правильным. Я просто немного отредактировал это, чтобы быть точным для моего вопроса и ответа. – nfarshchi

+1

, но вопрос в том, что означает 'animation.fillMode' в этом коде ???? Я все еще удивляюсь – nfarshchi

+0

'форварды' эквивалентно существующим значениям времени замерзания' замороженных', 'назад 'перед нолем до нуля,' оба 'фиксируют значения времени на обоих концах временного пространства объекта! –

Смежные вопросы