当设备使用带计时器的幻灯片放映旋转时,图像被剪切
Image is cut when device it's rotated using a slide show with timer
我已经使用 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
求和多少。
但出于某种原因,如果我在称为图像的计时器的精确时刻旋转设备,则无法正确前进到下一个,我们可以看到前一个部分和下一个部分,当然,如果我用手指移动它,它就会恢复正常。
如果此时调用计时器,如何避免旋转?
有什么建议吗?
循环开始时停止(使)计时器,并在循环结束时再次启动(创建一个新计时器)。您的视图控制器获取事件,告诉您旋转何时开始以及何时结束。
(另一种可能性:简单地检测到旋转已经结束并调用 updateScrollView
然后在那里,以强制下一张幻灯片,以防我们处于 "stuck" 位置。但我认为我的第一个建议可能更好。)
我已经使用 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
求和多少。
但出于某种原因,如果我在称为图像的计时器的精确时刻旋转设备,则无法正确前进到下一个,我们可以看到前一个部分和下一个部分,当然,如果我用手指移动它,它就会恢复正常。
如果此时调用计时器,如何避免旋转? 有什么建议吗?
循环开始时停止(使)计时器,并在循环结束时再次启动(创建一个新计时器)。您的视图控制器获取事件,告诉您旋转何时开始以及何时结束。
(另一种可能性:简单地检测到旋转已经结束并调用 updateScrollView
然后在那里,以强制下一张幻灯片,以防我们处于 "stuck" 位置。但我认为我的第一个建议可能更好。)