当设备使用带有计时器的幻灯片旋转时,图像被剪切

时间:2015-01-27 19:32:49

标签: swift uiscrollview ios8 slideshow

我使用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相加多少。

但出于某种原因,如果我在精确的时刻旋转设备,它称为图像的计时器没有正确地前进到下一个,我们可以看到前一部分和一部分当然,如果我用手指移动它,它就会重新开始工作。

如果此时调用的计时器怎么办? 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

旋转开始时停止(无效)计时器,并在旋转结束时再次启动计时器(创建一个新计时器)。您的视图控制器会获取事件,告诉您轮换何时开始以及何时结束。

(另一种可能性:只是检测到旋转已经结束并在那里调用updateScrollView,强制下一张幻灯片以防我们处于"卡住的位置。但我想我的第一个建议可能更好。)