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