popspringanimation在UINavigationController委托中非常不稳定

时间:2015-11-24 08:46:22

标签: ios objective-c facebook-pop

在UINavigationController委托中我在过渡中添加了流行动画,我做的如下:

- (NSTimeInterval) transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
    return self.duration;
}

- (void) animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {

    UIView *containerView = [transitionContext containerView];
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    // I get some cell from initialization
    UIImageView *avatarImage = [[UIImageView alloc] initWithFrame:frame];
    avatarImage.image = _cell.avatarImageView.image;
    avatarImage.clipsToBounds = YES;
    avatarImage.layer.cornerRadius = avatarImage.frame.size.width/2.0;
    CGFloat originSize = avatarImage.frame.size.width;
    [fromViewController.view addSubview:avatarImage];
    CGFloat avatarSize = CURRENT_SCREEN_WIDTH * 0.15;
    CGFloat avatarPositionY = CURRENT_SCREEN_WIDTH * 0.4;
    POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPosition];
    animation.toValue = [NSValue valueWithCGPoint:CGPointMake(CURRENT_SCREEN_WIDTH/2.0, avatarPositionY + avatarSize/2.0 - 64)];
    animation.springBounciness = 2.0;
    [avatarImage.layer pop_addAnimation:animation forKey:@"move"];


    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        toViewController.view.alpha = 1;
    } completion:^(BOOL finished) {
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
        [imageView removeFromSuperview];
        [avatarImage removeFromSuperview];
    }];
}

但问题是,它根本不顺利,问题是什么?

1 个答案:

答案 0 :(得分:0)

可能存在多个问题;

  • 你的形象非常大(在记忆中)
  • 角落半径不是
  • 您在此动画期间在主线程上执行其他操作

尝试以下操作,看看每次更改后动画是否流畅:

删除/注释:

avatarImage.image = _cell.avatarImageView.image;

删除/注释:

avatarImage.clipsToBounds = YES;
avatarImage.layer.cornerRadius = avatarImage.frame.size.width/2.0;