Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UILabel size change suddenly when parent UIView animate

I want to send a subview out of my super UIView with animation, It works fine but when i tried to change the size during animation any UILabel that i have in my subview suddenly become too small. here is part of my code

-(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!");
                 }];
}   

note: any UIButton or UIImage that is inside my subview animated well but i have only problem with UILabel.

like image 463
nfarshchi Avatar asked Jan 22 '26 13:01

nfarshchi


1 Answers

UIView animation is not good option for doing this, instead of it try CAKeyframeAnimation. This is sample code for scaling 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"];
}

you can use this after you add your UIView as subView then you can call this method as scale it. for push out a sub view with this method you need to use removeFromSubView after the animation finished. for knowing that when it finished use

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

I hope it be useful!

like image 65
Hamed Rajabi Avatar answered Jan 25 '26 11:01

Hamed Rajabi