Ber*_*rnd 6 objective-c ios autolayout uikit-dynamics swift
我想使用UIKitDynamics UISnapBehaviour来增加按钮的动画(外观+旋转位置变化),该按钮本身位于使用自动布局的视图中.
我知道在应用UIKitDynamics力时我需要暂时禁用按钮的自动布局约束.我在考虑以下过程......
这是正确的方法吗?
哪些委托/布局应该用于那些相应的步骤+如何在实际基于自动布局的动画/转换发生之前从自动布局获取视图的目标中心?
我可能会建议采用一种不同的方法来近似UISnapBehavior,但避免尝试将 UIKit Dynamics 与自动布局结合起来,在自动布局中您依赖自动布局引擎来确定视图的最终位置。(显然,如果您知道最终目的地,那么您只需暂停自动布局、捕捉,然后在捕捉完成后应用约束。)
对于视图捕捉到位时的弹跳效果,您可以使用animateWithDurationwithusingSpringWithDamping参数,例如:
// create the view
UIView *view = ...;
view.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:view];
// add all of the constraints for the final position
NSDictionary *views = NSDictionaryOfVariableBindings(view);
[self.view addConstraints:...];
// animate the application of those constraints with low `withSpringWithDamping`
[UIView animateWithDuration:1.0 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:0.0 options:0 animations:^{
[view layoutIfNeeded];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)
如果您还希望在卡入到位时进行一些旋转,您可以使用animateKeyframesWithDuration:
[UIView animateKeyframesWithDuration:1.0 delay:0.0 options:0 animations:^{
[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
view.transform = CGAffineTransformMakeRotation(M_PI_4 / 2);
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
view.transform = CGAffineTransformMakeRotation(-M_PI_4 / 4);
}];
[UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.125 animations:^{
view.transform = CGAffineTransformMakeRotation(M_PI_4 / 16);
}];
[UIView addKeyframeWithRelativeStartTime:0.875 relativeDuration:0.125 animations:^{
view.transform = CGAffineTransformMakeRotation(0);
}];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)
这并不完全是UISnapBehavior,但非常接近。您还可以调整关键帧动画中的旋转时间和旋转量以及弹簧阻尼系数。但这说明了一种使用基于块的动画获得类似快照的行为的方法。
| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |