Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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
UIView动画在第一次使用Xcode 6.1 swift之后似乎加快了速度_Xcode_Swift_Uiviewanimation - Fatal编程技术网

UIView动画在第一次使用Xcode 6.1 swift之后似乎加快了速度

UIView动画在第一次使用Xcode 6.1 swift之后似乎加快了速度,xcode,swift,uiviewanimation,Xcode,Swift,Uiviewanimation,由于某种原因,在我第一次调用一系列动画块后,动画似乎更快,不确定这是错误还是我做错了什么,但我肯定有人会打电话告诉我。。我创建了一个UIView子类来处理这个问题 import UIKit import QuartzCore class GBPopupController: UIView { var originalContainerCenterY = CGFloat() @IBOutlet var continerConstraintCenterY: NSLayoutConstraint

由于某种原因,在我第一次调用一系列动画块后,动画似乎更快,不确定这是错误还是我做错了什么,但我肯定有人会打电话告诉我。。我创建了一个UIView子类来处理这个问题

import UIKit
import QuartzCore

class GBPopupController: UIView {

var originalContainerCenterY = CGFloat()

@IBOutlet var continerConstraintCenterY: NSLayoutConstraint!
@IBOutlet var containerConstraintCenterX: NSLayoutConstraint!


var startingCenter = CGPoint()
@IBOutlet var contentView: UIView!
@IBOutlet var button: UIButton!


override func layoutSubviews() {
    super.layoutSubviews()
    contentView.layer.cornerRadius = 10
    button.layer.cornerRadius = 10

}

override func didMoveToSuperview() {
   self.beginViewAnimations()
}

func animatePopupIn() {

    UIView.animateWithDuration(1.0, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.7, options: UIViewAnimationOptions.CurveEaseIn, animations: {

        self.contentView.layer.transform = CATransform3DIdentity

        }, completion: {finished in
    })
}

func beginViewAnimations() {
    var transform = CATransform3DIdentity;
    transform = CATransform3DMakeTranslation(0, -self.frame.size.height, 0)

    self.contentView.layer.transform = transform

    UIView.animateWithDuration(0.4, delay: 0.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {

        self.backgroundColor = UIColor(white: 0.0, alpha: 0.5)

        }, completion: {finished in

            self.animatePopupIn()
    })


}

func removeViewFromSuperView() {
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {

        var transform = CATransform3DIdentity;
        transform = CATransform3DMakeTranslation(0, -self.frame.size.height, 0)
        self.contentView.layer.transform = transform

        }, completion: {finished in

            UIView.animateWithDuration(0.4, delay: 0.0, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: {
                self.backgroundColor = UIColor.clearColor()

                }, completion: {finished in
                    self.removeViewAnimation()
            })

    })
}

func removeViewAnimation() {
    self.removeFromSuperview()

}

我的评论太长,所以我在这里回答。我不知道它是否能帮到你,但这是我所做的

我使用自动布局,因此在viewdidload中,尺寸尚未初始化。它们基于600x600大小的屏幕,表示任意宽度、任意高度。在我的案例中,当第一个动作完成后,屏幕大小就会显示出来,就像按下按钮一样

这就是为什么我第一次在第一个动作中调用我的动画,只是为了把我的帧放在好的位置。那么其余的都一样。但它用正确的帧大小和位置初始化了我的视图。在那之后,我没有这个问题,我的动画也很好

就像我第一次调用它两次一样,一次是初始化,一次只是播放动画

我做了一些研究,我发现这可能是与帧不同的层的问题,并且该层使用与您选择的动画不同的动画初始化。这就是为什么我第一次没有同样的动画


希望能对您有所帮助。

我可能也有同样的问题。我有一个打开/关闭视图的按钮。我使用UIView.animateWithDuration0.5,animations:{}我不知道为什么,但第一次用这种方法打开视图时,动画是不同的。你找到答案了吗?没有,很遗憾没有找到答案