gpt4 book ai didi

ios - 摇动一个 UIView ... 但是使用 UIKit Dynamics

转载 作者:可可西里 更新时间:2023-11-01 05:12:28 25 4
gpt4 key购买 nike

有很多情况需要“摇动”一个 UIView。

(例如,“将 child 用户的注意力吸引到控件上”、“连接速度慢”、“用户输入了错误的输入”等。)

是否可以使用 UIKit Dynamics 来做到这一点?

所以你必须..

  • 取景,比如在 0,0

  • 添加一个 Spring 概念

  • 轻推一下,说“左”

  • 它应该在 Spring 上前后摆动,最终再次稳定到 0,0

这可能吗?我在 Apple 演示中找不到示例。干杯

请注意,正如 Niels 在下面敏锐地解释的那样,在某些情况下 Spring 不一定是您想要的“物理感觉”:在其他情况下它可能是完美的。据我所知,iOS 自己的应用程序(例如消息等)中的所有物理现在都使用 UIKit Dynamics,所以对我来说,了解“UIView 在 Spring 上弹跳”是值得的。


需要说明的是,您当然可以做一些“类似”的事情,只需要一个动画。示例...

但现在,它根本没有与 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];
}

最佳答案

如果你想使用 UIKit Dynamics,你可以:

  • 首先,定义一个控制动画师:

    @property (nonatomic, strong) UIDynamicAnimator *animator;

    并实例化它:

    self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
  • 其次,为该动画制作器添加附件行为以在当前位置查看。这将使它在插入完成后弹回。您必须尝试使用​​ dampingfrequency 值。

    UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:viewToShake attachedToAnchor:viewToShake.center];
    attachment.damping = 0.5;
    attachment.frequency = 5.0;
    [self.animator addBehavior:attachment];

    这些值不太正确,但也许它是您实验的起点。

  • 应用推送行为 (UIPushBehaviorModeInstantaneous) 来扰乱它。然后,依恋行为将导致其弹回。

    UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[viewToShake] mode:UIPushBehaviorModeInstantaneous];
    push.pushDirection = CGVectorMake(100, 0);
    [self.animator addBehavior:push];

就我个人而言,我对这个特定的动画并不着迷(阻尼曲线对我来说不太合适)。我倾向于使用基于 block 的动画将其移动到一个方向(使用 UIViewAnimationOptionCurveEaseOut),完成后启动另一个将其移动到相反的方向(使用 UIViewAnimationOptionCurveEaseInOut),并且然后在完成后,使用 animateWithDurationusingSpringWithDamping 再现将其移回原来的位置。恕我直言,这会产生一条曲线,感觉更像是“如果错了就摇一摇”的体验。

关于ios - 摇动一个 UIView ... 但是使用 UIKit Dynamics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com