首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在滚动视图上使用UIDynamicAnimator?

在滚动视图上使用UIDynamicAnimator?
EN

Stack Overflow用户
提问于 2014-05-19 13:09:05
回答 1查看 994关注 0票数 2

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

所以我有了我的scrollView,里面有很多UIViews。我想做任何类型的动画,它的"subViews“,同时滚动。

试过了-什么都没发生。

代码语言:javascript
复制
  //DYNAMICS ANIMATIONS
    UIDynamicAnimator *dynamic=[[UIDynamicAnimator alloc] initWithReferenceView:scroller];
    UIGravityBehavior *gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:mainCellsArray];
    [dynamic addBehavior:gravityBeahvior];

mainCellsArray持有滚动体的所有"subViews“时。

编辑:我为dynamic提供了一个强大的property。数组包含我的服装类指针,每个类都是一个UIView子类,它们都是scroller子类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-19 14:30:50

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

代码语言:javascript
复制
@property (strong, nonatomic) UIDynamicAnimator *animator;

然后实例化动画器:

代码语言:javascript
复制
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.scrollView];

再加上重力:

代码语言:javascript
复制
UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[viewToAnimate]];
[self.animator addBehavior:gravityBehavior];

如果您希望它们在到达滚动视图的contentSize底部时停止,则不能使用典型的translatesReferenceBoundsIntoBoundary设置。你必须自己走一条路,例如:

代码语言:javascript
复制
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];

或者,如果希望它们飞离滚动视图,则可能希望在它们不再与滚动视图的contentSize相交时删除它们:

代码语言:javascript
复制
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];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23738628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档