Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么重复UIView动画在边缘滑动时冻结?_Ios_Swift_Core Animation - Fatal编程技术网

Ios 为什么重复UIView动画在边缘滑动时冻结?

Ios 为什么重复UIView动画在边缘滑动时冻结?,ios,swift,core-animation,Ios,Swift,Core Animation,我试图创建一个从右向左连续滚动图像的视图,有效地创建一个无限滚动的背景。我使用两个相邻的图像视图,并使用ui视图动画设置为。重复,以负水平偏移平移帧。(代码如下) 它工作得很好!在尝试在导航控制器中进行边缘滑动之前,动画将冻结: 我的代码如下所示: class ScrollingImageView: UIView { required init?(coder aDecoder: NSCoder) { fatalError() } let imageView = UIImage

我试图创建一个从右向左连续滚动图像的视图,有效地创建一个无限滚动的背景。我使用两个相邻的图像视图,并使用
ui视图
动画设置为
。重复
,以负水平偏移平移帧。(代码如下)

它工作得很好!在尝试在导航控制器中进行边缘滑动之前,动画将冻结:

我的代码如下所示:

class ScrollingImageView: UIView {
    required init?(coder aDecoder: NSCoder) { fatalError() }

    let imageView = UIImageView()
    let imageView2 = UIImageView()

    override init(frame: CGRect) {
        super.init(frame: frame)


        imageView.image = UIImage(named: "mario")
        imageView2.image = UIImage(named: "mario")

        imageView.frame = bounds
        imageView2.frame = CGRectOffset(bounds, bounds.width, 0)

        addSubview(imageView)
        addSubview(imageView2)
    }

    func play() {
        UIView.animateWithDuration(5, delay: 0, options: [.Repeat, .CurveLinear], animations: {
            self.imageView.frame = CGRectOffset(self.imageView.frame, -self.bounds.width, 0)
            self.imageView2.frame = CGRectOffset(self.imageView2.frame, -self.bounds.width, 0)
        }, completion: nil)
    }
}

为什么此交互开始时动画停止?我认为这与互动手势有关,它将
CALayer
上的速度设置为零。有没有办法让这个动画继续播放?

正如您正确地说的,您使用的是一种互动手势。它是如何工作的?它冻结动画(层<代码>速度为零)并更改其“帧”(层<代码>时间偏移)以匹配手势的当前位置


为了解决这个问题,你也许可以把动画放到另一个层,尽管我不确定。我确信,这种方式可以自己实现整个自定义转换交互——不使用UIPercentDriventerActiveTransition(冻结动画),而是在转换过程中自己定位视图

“我认为这与互动手势有关,将CALayer上的速度设置为零“宾果!这就是交互手势的工作原理。@matt有没有办法让这个动画不参与交互手势?我曾经考虑过自己使用
CADisplayLink
来编排这些帧,但这看起来很难看。有什么建议吗?我会走另一条路:做你自己的互动手势。请看我的答案…相关:这感觉真是太过分了,因为这只是一个标准的导航控制器和转换。在我的实际应用程序中,它只是一个相当复杂的视图树中的一个项目,因此视图控制器会跳过几层抽象来为这个视图做一些特殊的事情。另外,我应该在原始问题中包括这一点,当我将应用程序发送到后台时,动画也会停止,然后把它带回到前台。这是同一个问题,还是另一个问题?(有趣的是,
UIActivityIndicatorView
在交互转换期间也会暂停,但在恢复后台应用程序时不会冻结)“另外,我应该在原始问题中包含这一点,当我将应用程序发送到后台,然后将其返回前台时,动画也会停止。这是同一个问题,还是另一个问题“不,这很正常。当你进入后台时,动画会被取消。这取决于你在进入前台时是否继续。当然,这“感觉太过分了。”“。然而,没有神奇的方法可以阻止运行时执行它通常执行的操作。如果你对此足够关心,那么我的建议可能就是你必须要做的。