【问题标题】:A better way to stagger method calls/display 3 UIImageViews in delayed sequence以延迟顺序错开方法调用/显示 3 个 UIImageView 的更好方法
【发布时间】:2010-07-26 16:24:58
【问题描述】:

我已经设法解决了这个问题,但是代码看起来效率很低,实际上,如果用户导航到另一个屏幕,延迟的方法调用在继续触发时会有点麻烦。

基本上,我希望从角色的头部出现一个思想泡泡,但是是动画的,所以会出现一个小泡泡,然后是一个更大的泡泡,然后是一个更大的泡泡,最后是包含一点动画的主泡泡。我通过使用自己的方法显示每个气泡,然后延迟调用这些方法来解决这个问题:

- (void)showMood {
    animating = TRUE;
    [self showBubble1];
}

- (void)showBubble1 {
    bubble1.hidden = FALSE;
    [self performSelector:@selector(showBubble2) withObject:nil afterDelay:kBubbleDelay];
}

- (void)showBubble2 {
    bubble2.hidden = FALSE;
    [self performSelector:@selector(showBubble3) withObject:nil afterDelay:kBubbleDelay];
}

- (void)showBubble3 {
    bubble3.hidden = FALSE;
    [self performSelector:@selector(showThoughtBubble) withObject:nil afterDelay:kBubbleDelay];
}

- (void)showThoughtBubble {
    thoughtBubble.hidden = FALSE;   
    [self startBubbleAnimations];
    [self performSelector:@selector(hideThoughtBubble) withObject:nil 

afterDelay:kAnimationDuration * kAnimationRepeatCount];
    }

- (void)hideThoughtBubble {
    bubble1.hidden = TRUE;
    bubble2.hidden = TRUE;
    bubble3.hidden = TRUE;
    thoughtBubble.hidden = TRUE;
    [bubbleAnimation stopAnimating];
    animating = FALSE;
}

我想我可以创建一个大型动画,其中气泡都是同一帧的一部分,并且每一帧都包含一个气泡,但我有点希望能够在 Interface Builder 和这种方法中移动气泡没有提供太大的灵活性。

任何想法将不胜感激。

谢谢,

迈克尔

【问题讨论】:

    标签: objective-c animation methods uiimageview delayed-execution


    【解决方案1】:

    可能有更好的方法来执行此序列,但一个简单的改进是在进行更改之前检查视图是否可见。这样,如果视图已被另一个视图替换,这些将停止:

    - (void)showBubble1 {
        if (bubble1.window) {   // check to see if view is visible
            bubble1.hidden = NO;
            [self performSelector:@selector(showBubble2) withObject:nil afterDelay:kBubbleDelay];
        }
    }
    

    另外,我不确定您从哪个线程开始,但请确保它位于主线程上。 UI 调用应该只在主线程上完成。您可以使用performSelectorOnMainThread: 方法之一在主线程上启动它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-27
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 2016-07-14
      • 2019-03-15
      • 1970-01-01
      相关资源
      最近更新 更多