ios - UIView 动画 block 问题

标签 ios iphone objective-c animation uiview

我正在尝试实现一个嵌套的动画 block 。我面临的问题是只调用我的完成 block 代码。当我注释掉时,将调用初始部分。如何让动画完成第一个动画然后调用第二个动画?

- (void)viewDidAppear:(BOOL)animated
{
    _finalLogoCenter = self.logoImage.center;
    // Logo Animation
    [self logoAnimation];
}

- (void) logoAnimation
{

    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionTransitionNone
                     animations:^ {
                         // Move Up
                         [self moveLogoUpFirst];
                     }completion:^(BOOL finished)
                    {
                         // Move below final point
                         [self moveLogoDownBeyondFinalPoint];
                    }];
}

- (void) moveLogoUpFirst
{
    __block CGPoint logoCenter = self.logoImage.center;
    logoCenter.y = 290.0f;
    self.logoImage.center = logoCenter;
    [self.logoImage setAlpha:0.0f];
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionTransitionNone
                     animations:^ {
                         logoCenter.y = _finalLogoCenter.y - 20;
                         self.logoImage.center = logoCenter;
                         [self.logoImage setAlpha:1.0f];
                     }completion:nil];
}

- (void) moveLogoDownBeyondFinalPoint
{
    __block CGPoint logoCenter = self.logoImage.center;
    self.logoImage.center = logoCenter;
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionTransitionNone
                     animations:^ {
                         logoCenter.y = _finalLogoCenter.y + 5;
                         self.logoImage.center = logoCenter;
                     }completion:nil];
}

最佳答案

我认为问题出在另一个动画中的动画。这没有任何意义,我想这可能会导致意外行为。

你可以做的是在第一个动画中设置一个完成 block

- (void) moveLogoUpFirst:(void (^)(BOOL finished))completion
{
    __block CGPoint logoCenter = self.logoImage.center;
    logoCenter.y = 290.0f;
    self.logoImage.center = logoCenter;
    [self.logoImage setAlpha:0.0f];
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionTransitionNone
                     animations:^ {
                         logoCenter.y = _finalLogoCenter.y - 20;
                         self.logoImage.center = logoCenter;
                         [self.logoImage setAlpha:1.0f];
                     }completion:^(BOOL finished)
                    {
                         completion(finished);
                    }];
}

当你调用它时,只需使用没有任何动画的代码:

[self moveLogoUpFirst:^(BOOL finished) {
    [self moveLogoDownBeyondFinalPoint]
}];

关于ios - UIView 动画 block 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22686831/

相关文章:

iPhone/Objective-C : NSMutableArray writeToFile won't write to file. 总是返回 NO

ios - 如何从状态为完整的 NSMutableArray 获取最后一个元素?

objective-c - 转换NSDate

javascript - iOS 上的 Facebook 浏览器 : problems with localStorage

ios - 如何在 Mapbox 中添加一张大图像作为叠加层?

ios - cellForItemAt 在 Swift collectionView 中仅调用一次

ios - iOS的钥匙串(keychain)服务,删除钥匙串(keychain)错误

ios - 在没有全屏的 UIWebView 中播放 Youtube 视频

iPhone 应用程序开发

objective-c - 从另一个类实现中获取 CGFloat 实例变量