OStack程序员社区-中国程序员成长平台

标题: ios - 在 ScrollView 上使用 UIDynamicAnimator? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:57
标题: ios - 在 ScrollView 上使用 UIDynamicAnimator?

我正在尝试在具有许多元素的 scrollView 上实现 UIDynamicAnimator 效果。我在任何地方都找不到太多关于它的信息,所以我只需要一些起点。

所以我有我的 scrollView,其中包含许多 UIViews。我想在滚动时为其“ subview ”制作任何类型的动画。

试过了-什么也没发生。

  //DYNAMICS ANIMATIONS
    UIDynamicAnimator *dynamic=[[UIDynamicAnimator alloc] initWithReferenceView:scroller];
    UIGravityBehavior *gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:mainCellsArray];
    [dynamic addBehavior:gravityBeahvior];

mainCellsArray 持有滚动条的所有“ subview ”时。

编辑: 我对 dynamic 有一个强大的 property 。 该数组包含我的服装类指针,每个类都是 UIView 子类,它们都是滚动子类的。



Best Answer-推荐答案


首先,确保将动画器定义为一个属性,而不仅仅是一个局部变量(我倾向于使用 animator 作为名称,以避免与 @ 混淆动态关键字):

@property (strong, nonatomic) UIDynamicAnimator *animator;

然后实例化动画师:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.scrollView];

并添加重力:

UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems[viewToAnimate]];
[self.animator addBehavior:gravityBehavior];

如果您希望它们在到达 ScrollView 的 contentSize 底部时停止,则不能使用典型的 translatesReferenceBoundsIntoBoundary 设置。您必须自己制作一条路径,例如类似:

UICollisionBehavior *collision = [[UICollisionBehavior alloc] initWithItems[viewToAnimate]];
CGRect contentSizeRect = {CGPointZero, self.scrollView.contentSize};
UIBezierPath *path = [UIBezierPath bezierPathWithRect:contentSizeRect];
[collision addBoundaryWithIdentifier"contentSize" forPath:path];
[self.animator addBehavior:collision];

或者,如果您希望它们飞离 ScrollView ,您可能希望在它们不再与 ScrollView 的 contentSize 相交时将它们移除:

UIGravityBehavior *gravity = [[UIGravityBehavior alloc] initWithItems[viewToAnimate]];
UIGravityBehavior __weak *weakGravity = gravity;
CGRect contentSizeRect = {CGPointZero, self.scrollView.contentSize};
gravity.action = ^{
    if (!CGRectIntersectsRect(contentSizeRect, viewToAnimate.frame)) {
        NSLog(@"removing view");
        [viewToAnimate removeFromSuperview];
        [self.animator removeBehavior:weakGravity];
    }
};
[self.animator addBehavior:gravity];

关于ios - 在 ScrollView 上使用 UIDynamicAnimator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23738628/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4