Fat*_*tie 4 user-experience game-physics ios ios7 uikit-dynamics
在很多情况下你需要"摇动"UIView.
(例如,"吸引儿童用户注意控件","连接速度慢","用户输入错误输入"等等.)
使用UIKit Dynamics可以做到这一点吗?
所以你必须......
采取观点,比如说0,0
添加一个春天的概念
给它一个轻推,对"左"说
它应该在弹簧上向后摆动,最终再次稳定在0,0
这可能吗?我在Apple演示中找不到一个例子.干杯
请注意,正如Niels在下面明确地解释的那样,弹簧不一定是你想要的某些情况的"物理感觉":在其他情况下它可能是完美的.据我所知,iOS自己的应用程序(例如消息等)中的所有物理现在都使用了UIKit Dynamics,所以对我而言,值得一提的是"UIView弹跳弹簧".
为了清楚起见,当然你可以做一些"相似"的事情,只需动画即可.例...
但现在,这与iOS的其他部分没有相同的"物理感觉".
-(void)userInputErrorShake
{
[CATransaction begin];
CAKeyframeAnimation * anim =
[CAKeyframeAnimation animationWithKeyPath:@"transform"];
anim.values = @[
[NSValue valueWithCATransform3D:
CATransform3DMakeTranslation(-4.0f, 0.0f, 0.0f) ],
[NSValue valueWithCATransform3D:
CATransform3DMakeTranslation(4.0f, 0.0f, 0.0f) ]
];
anim.autoreverses = YES;
anim.repeatCount = 1.0f;
anim.duration = 0.1f;
[CATransaction setCompletionBlock:^{}];
[self.layer addAnimation:anim forKey:nil];
[CATransaction commit];
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用UIKit Dynamics,您可以:
首先,定义一个管理动画师:
@property (nonatomic, strong) UIDynamicAnimator *animator;
Run Code Online (Sandbox Code Playgroud)
并实例化它:
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
Run Code Online (Sandbox Code Playgroud)其次,为该动画师添加附件行为以便在当前位置查看.这将使它在推动完成后回弹.你必须玩弄damping和frequency价值观.
UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:viewToShake attachedToAnchor:viewToShake.center];
attachment.damping = 0.5;
attachment.frequency = 5.0;
[self.animator addBehavior:attachment];
Run Code Online (Sandbox Code Playgroud)
这些值并不完全正确,但也许它是您实验的起点.
应用推送行为(UIPushBehaviorModeInstantaneous)来扰乱它.然后,附着行为将导致其弹回.
UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[viewToShake] mode:UIPushBehaviorModeInstantaneous];
push.pushDirection = CGVectorMake(100, 0);
[self.animator addBehavior:push];
Run Code Online (Sandbox Code Playgroud)就个人而言,我对这个特定的动画并不感到疯狂(阻尼曲线对我来说感觉不太合适).我倾向于使用基于块的动画将其向一个方向移动(带UIViewAnimationOptionCurveEaseOut),完成后启动另一个向相反方向移动(带UIViewAnimationOptionCurveEaseInOut),然后在完成后,使用usingSpringWithDamping再现animateWithDuration将其移回其原点.恕我直言,这产生了一种曲线,感觉更像是"摇晃如果错误"的体验.
| 归档时间: |
|
| 查看次数: |
2272 次 |
| 最近记录: |