1

我正在使用水平 UIScrollView 在屏幕的前半部分显示照片。(想象一个CGRect(0,0,320,120)。第一个scrollView嵌入在第二个scrollview中,它占据了所有屏幕。当我向下滚动页面(因此第二个scrollView)时,第一个scrollview停止动画。我编写了一个NSTimer在第一个 UIScrollView 中每 3 秒更改一次照片,但是当我滚动第二个 scrollView 时,似乎动画正在排队。当我松开屏幕的手指时,照片转换很少(即:2 变化如果我连续滚动了 6 秒。简而言之:当我滚动第二个 scrollView 时,如何利用块(或其他东西)继续我的动画?

我的 NSTimer(在 viewDidLoad 中):

timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(changePage:) userInfo:nil repeats:YES];
4

1 回答 1

1

您的 iOS 应用程序有一个运行循环,它不断检查用户输入等内容。如果它忙于检测触摸事件,则在该运行循环上安排的事情将不会被执行。(类似地,如果你用一个大的服务器请求阻塞主线程,你将不会在那段时间得到触摸事件)。

以下是如何在正确的运行循环中获取 NSTimer:

首先,用于timerWithTimeInterval:target:selector:userInfo:repeats:创建未在运行循环上安排的计时器。其次,用于- (void)addTimer:(NSTimer *)aTimer forMode:(NSString *)mode在运行循环上安排计时器。对于 mode 参数(运行循环类型),用于NSRunLoopCommonModes允许计时器触发而无需等待主运行循环。

请注意,performSelectorAfterDelay如果在主运行循环中完成,则存在相同的效果。它也适用于动画完成块。除了使用 CoreAnimation 之外,我不确定是否有解决动画完成块问题的简单方法。

于 2012-10-18T03:17:48.623 回答