我正在尝试在具有许多元素的UIDynamicAnimator上实现scrollView效果。我在任何地方都找不到太多关于它的信息,所以我只需要一些起点。
所以我有了我的scrollView,里面有很多UIViews。我想做任何类型的动画,它的"subViews“,同时滚动。
试过了-什么都没发生。
//DYNAMICS ANIMATIONS
UIDynamicAnimator *dynamic=[[UIDynamicAnimator alloc] initWithReferenceView:scroller];
UIGravityBehavior *gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:mainCellsArray];
[dynamic addBehavior:gravityBeahvior];当mainCellsArray持有滚动体的所有"subViews“时。
编辑:我为dynamic提供了一个强大的property。数组包含我的服装类指针,每个类都是一个UIView子类,它们都是scroller子类。
发布于 2014-05-19 14:30:50
首先,确保将动画器定义为属性,而不仅仅是局部变量(我倾向于使用animator作为该属性的名称,以避免与@dynamic关键字混淆):
@property (strong, nonatomic) UIDynamicAnimator *animator;然后实例化动画器:
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.scrollView];再加上重力:
UIGravityBehavior *gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[viewToAnimate]];
[self.animator addBehavior:gravityBehavior];如果您希望它们在到达滚动视图的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];或者,如果希望它们飞离滚动视图,则可能希望在它们不再与滚动视图的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];https://stackoverflow.com/questions/23738628
复制相似问题