Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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 在使用“自动布局”时使用UIDynamicMator设置动画_Ios_Swift_Autolayout_Uidynamicanimator - Fatal编程技术网

Ios 在使用“自动布局”时使用UIDynamicMator设置动画

Ios 在使用“自动布局”时使用UIDynamicMator设置动画,ios,swift,autolayout,uidynamicanimator,Ios,Swift,Autolayout,Uidynamicanimator,我有一个ViewController,它已在InterfaceBuilder中配置为对其所有子视图使用自动布局。布局很好 我想使用UIDynamicMator提供的酷重力效果使其中一个子视图反弹。我不认为自动布局会起作用,但我试过了,它确实起作用了。它工作得很好 我的问题是,这是预期的行为吗?它会在某个地方引起问题吗?苹果公司是否提供了有关自动布局和UIDynamicAnimator组合的指导 以下是代码,供感兴趣的人使用: var boundaryFrame = self.button

我有一个ViewController,它已在InterfaceBuilder中配置为对其所有子视图使用自动布局。布局很好

我想使用UIDynamicMator提供的酷重力效果使其中一个子视图反弹。我不认为自动布局会起作用,但我试过了,它确实起作用了。它工作得很好

我的问题是,这是预期的行为吗?它会在某个地方引起问题吗?苹果公司是否提供了有关自动布局和UIDynamicAnimator组合的指导

以下是代码,供感兴趣的人使用:

    var boundaryFrame = self.buttonBackgroundView.frame
    boundaryFrame = CGRect(x: 0,
        y: boundaryFrame.origin.y + (boundaryFrame.height + 1),
        width: self.view.frame.width,
        height: 2)

    self.animator = UIDynamicAnimator(referenceView: self.view)
    var gravity = UIGravityBehavior(items: [self.buttonBackgroundView])
    gravity.magnitude = 0.5

    var collision = UICollisionBehavior(items: [self.buttonBackgroundView])
    var boundaryId: NSMutableString = NSMutableString(string: "bottomBoundary")
    let boundaryPath = UIBezierPath(rect: boundaryFrame)
    collision.addBoundaryWithIdentifier(boundaryId, forPath: boundaryPath)

    let bounceProperties = UIDynamicItemBehavior(items: [self.buttonBackgroundView])
    bounceProperties.elasticity = 0.5

    // Move it up before causing it to bounce down to its original location
    self.setMeUpTopConstraint.constant = 10
    self.view.setNeedsUpdateConstraints()
    self.view.layoutIfNeeded()

    // Start animating
    animator.addBehavior(gravity)
    animator.addBehavior(collision)
    animator.addBehavior(bounceProperties)

是的,UIDynamicMator可以与自动布局配合使用。我有一个应用程序,它在很大程度上依赖UIDynamicAnimator并使用约束,而且运行良好。我发现的唯一问题是UIView animateWithDuration不适用于约束,但该方法无论如何都不适用于UIDynamicMator。 希望有帮助:)

我的问题是,这是预期的行为吗?它会在某个地方引起问题吗?苹果公司是否提供了有关自动布局和UIDynamicAnimator组合的指导

基本上,UIKit Dynamics不能很好地处理自动布局。基本上,规则是更改某个对象的帧/中心与自动布局相反-这正是UIKit Dynamics所做的。您没有遇到问题的唯一原因是,您正在设置动画的视图上碰巧没有出现布局

测试的方法是这样的。运行代码,然后(当动画完成时;可能需要使用延迟性能)运行


这会导致布局发生。如果事情在那一刻突然发生,就会暴露问题

谢谢,马特。在本例中,我正在将某些内容设置回其最终布局,并且在动画过程中不会发生其他布局更改,因此在本场景中使用它可能是可以的。3个问题:1。你是说如果在动画中出现布局,那会导致问题吗?2.以前从未听说过“延迟性能”,但谷歌告诉我这是一件事。你能给我指一下有关这方面的资料吗?3.如果您想在使用autolayout的viewcontroller中为UI元素设置动画(例如,反弹或摆动),您会怎么做?@skypecakes 1。是-或者如果发生在之后。但是,如果动画将所有内容精确地返回到其原始位置,则不会出现问题,因为您所做的(使用帧)和自动布局所做的(使用约束)具有相同的结果。2.请看我的书:3.大主题,但请看我的文章:再次感谢。我现在正在读你关于延迟演出的讨论。关于#1和#3,我必须承认我对iOS中的动画了解不够,无法理解你的文章,甚至无法理解我是如何在动画中使用帧的!我想做一个深入的研究,花足够的时间去理解它。你是怎么学到这么多关于动画的知识的?对刚开始工作的人有什么建议吗?@skypecakes是我所知道的一切,我从阅读(和写作)我自己的书中了解到的。:)
self.view.layoutIfNeeded