我使用UIScrollView开发了一个幻灯片,我已经实现了一个NSTimer,可以通过以下方式在一段时间内自动更改图像:
override func viewDidLoad() {
...
isLandscape = UIApplication.sharedApplication().statusBarOrientation.isLandscape
NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("updateScrollView"), userInfo: nil, repeats: true)
}
调用更改的方法:
func updateScrollView(){
var offsetX = scrollView.contentOffset.x
if (self.isLandscape!){
scrollView.setContentOffset(CGPoint(x: offsetX + 1024, y: 0), animated: true)
}
else{
scrollView.setContentOffset(CGPoint(x: offsetX + 768, y: 0), animated: true)
}
}
我创建了一个名为isLandscape
的变量,以了解设备何时处于纵向或横向状态,并且在此基础上知道要与contentOffset
相加多少。
但出于某种原因,如果我在精确的时刻旋转设备,它称为图像的计时器没有正确地前进到下一个,我们可以看到前一部分和一部分当然,如果我用手指移动它,它就会重新开始工作。
如果此时调用的计时器怎么办? 有什么建议吗?
答案 0 :(得分:1)
旋转开始时停止(无效)计时器,并在旋转结束时再次启动计时器(创建一个新计时器)。您的视图控制器会获取事件,告诉您轮换何时开始以及何时结束。
(另一种可能性:只是检测到旋转已经结束并在那里调用updateScrollView
,强制下一张幻灯片以防我们处于"卡住的位置。但我想我的第一个建议可能更好。)