Ios 在滚动视图上使用UIDynamicMator?

Ios 在滚动视图上使用UIDynamicMator?,ios,objective-c,uikit-dynamics,Ios,Objective C,Uikit Dynamics,我正在尝试在包含许多元素的滚动视图上实现UIDynamicAnimator效果。我在任何地方都找不到太多关于它的信息,所以我只需要一些起点 因此,我有了我的滚动视图,其中有许多ui视图。我想在滚动时为其“子视图”制作任何类型的动画 我试着什么都不发生 //DYNAMICS ANIMATIONS UIDynamicAnimator *dynamic=[[UIDynamicAnimator alloc] initWithReferenceView:scroller]; UIGra

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

因此,我有了我的
滚动视图
,其中有许多
ui视图
。我想在滚动时为其“子视图”制作任何类型的动画

我试着什么都不发生

  //DYNAMICS ANIMATIONS
    UIDynamicAnimator *dynamic=[[UIDynamicAnimator alloc] initWithReferenceView:scroller];
    UIGravityBehavior *gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:mainCellsArray];
    [dynamic addBehavior:gravityBeahvior];
mainCellarray
保存滚动条的所有“子视图”时

编辑: 对于
动态
,我有一个强大的
属性

该数组包含我的costude类指针,每个类都是
UIView
子类,它们都是scroller子类。

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

然后实例化动画师:

self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.scrollView];
加上重力:

UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[viewToAnimate]];
[self.animator addBehavior:gravityBehavior];
如果希望它们在到达滚动视图的
contentSize
底部时停止,则不能使用典型的
translatesReferenceBoundsToboundary
设置。您必须自己创建一条路径,例如:

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
相交时,可能需要将其删除:

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];

两者都有。我有UIDynamicMator*dynamic的一个属性,但我仍然看到滚动时没有发生任何事情。我必须说,数组包含我的costure类,每个类都是UIView子类,对吗?你说“当[i]滚动时,我仍然看不到任何事情发生”。我不明白你的意思。你根本看不到风景在移动吗?或者,当您滚动到底部时,您是否希望在底部看到它们?添加重力行为时,子视图将下降,除非添加碰撞行为,否则它们将在不再可见后继续下降。
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];