• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 在 ScrollView 上使用 UIDynamicAnimator?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:57:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试在具有许多元素的 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap