有没有人知道Apple音乐中的流派选择泡沫是如何产生的?这项运动似乎是用UiKit Dynamics完成的.我肯定会看到碰撞行为,但似乎无法再现拖曳运动的流动性和朝向视图中心的重力.我试着用UIPushBehavior和UiSnapBehavior,但没有运气.

如何在平底锅上发生碰撞检测UIDynamicItem?
背景:我从一组颜色/字符串中随机生成20个标签(这部分对于问题不是必不可少的),然后将它们添加到具有随机中心位置的主视图中.从那里,我添加UIDynamicBehaviors,如下:
1)UIDynamicItemBehavior停止旋转2)标签UISnapBehavior的标签捕捉到视图的中心(我想重力状运动,但同样,这不是这个问题)3)UICollisionBehavior所有的标签,其中collisionMode的.Items.
这适用于"初始"设置...所有标签都出现在随机点上,然后在中心快速捕捉,并进行适当的碰撞检测.但问题是,我怎样才能移动标签(通过平移手势),以便继续进行碰撞检测?
我已经UIPanGestureRecognizer在每个标签上设置了一个,当它们开始拖动时,我创建一个UIAttachmentBehavior并使用它来拖动它们.这在标签移动的意义上"起作用",但它只会滑过所有其他标签而不会发生任何碰撞检测.我怎样才能实现这种碰撞检测,这样当我开始将一个标签拖向其他标签时,它们就会移开,只是为了没有重叠(然后根据中心重力点重新回到它们的位置) ?我是否需要将UIAttachmentBehavior所有其他标签附加到我为每个平底锅拖动的标签上?
我已经为我面临的问题创建了一个测试项目,它展示了我刚刚描述的内容:
谢谢!
我喜欢那个UISnapBehavior片段,但是我真的想用它来向一个方向滑动,只是稍微摆动一下.
有没有办法关闭这种行为的旋转?
因为SpriteKit有allowsRotation可以轻易关闭的财产.
我正在研究可扩展托盘视图的代码,该视图使用UIDynamicAnimator来实现漂亮的扩展/合约动画.
为了实现逼真的加速度,我使用UIGravityBehavior托盘下降,直到托盘的"标签"碰到屏幕底部.
这很有效,但即使场景中的所有项目都停止移动,UIDynamicAnimatorDelegate dynamicAnimatorDidPause:也从不调用.这意味着动画师继续使用CPU周期为场景设置动画(委托已设置并触发UIDynamicAnimatorDelegate dynamicAnimatorDidPause:).
我尝试UIGravityBehavior从场景中移除,这确实导致动画师最终停止.我没有时间去除重力行为,因为我需要在一切停止移动后将其从场景中移除.
我知道引力是一个恒定的力,但我仍然认为一旦所有的速度都为0且加速度为0,它就会停止动画师.
这最后一个假设是假的吗?
有类似问题的人吗?
我正在使用一个UISnapBehavior,但它的速度太快了,我不喜欢.有没有办法减慢速度?或者换句话说:有没有办法调整物体的弹性以及它应该捕捉的点?
我有一个视图,其边界设置为碰撞(setTranslatesReferenceBoundsIntoBoundaryWithInsets)和一个重力的子视图设置,以便它可以碰撞超视图边界.
我试图使碰撞0%有弹性,但我还没弄明白怎么样.我尝试了一个UIDynamicItemBehavior弹性为0的子视图,同样具有可笑的高摩擦力而且没有任何东西.我的理由是,0弹性已经意味着在力的作用下再次出现力量再生,但即使是负数似乎也没有做任何事情,也没有什么关系.
关于如何进行碰撞的任何想法都会吸收所有能量或任何使得子视图在碰撞边界时不反弹所需的能量?
我遇到了一个奇怪的崩溃并试图整天修复它.我有一个自定义UICollectionViewLayout,它基本上增加了细胞的重力和碰撞.
实施效果很好!当我尝试使用以下命令删除一个单元格时会出现问题:[self.collectionView performBatchUpdates:].
它给了我以下错误:
2013-12-12 21:15:35.269 APPNAME[97890:70b] *** Assertion failure in -[UICollectionViewData validateLayoutInRect:], /SourceCache/UIKit_Sim/UIKit-2935.58/UICollectionViewData.m:357
2013-12-12 20:55:49.739 APPNAME[97438:70b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UICollectionView recieved layout attributes for a cell with an index path that does not exist: <NSIndexPath: 0x975d290> {length = 2, path = 0 - 4}'
Run Code Online (Sandbox Code Playgroud)
我的模型处理正确,我可以看到它从中删除项目!
要删除的项的indexPaths正在对象之间正确传递.collectionView更新没有崩溃的唯一时间是我删除它上面的最后一个单元格,否则,崩溃就会发生.
这是我用来删除单元格的代码.
- (void)removeItemAtIndexPath:(NSIndexPath *)itemToRemove completion:(void (^)(void))completion
{
UICollectionViewLayoutAttributes *attributes = [self.dynamicAnimator layoutAttributesForCellAtIndexPath:itemToRemove];
[self.gravityBehaviour removeItem:attributes];
[self.itemBehaviour removeItem:attributes];
[self.collisionBehaviour removeItem:attributes];
[self.collectionView performBatchUpdates:^{
[self.fetchedBeacons removeObjectAtIndex:itemToRemove.row];
[self.collectionView deleteItemsAtIndexPaths:@[itemToRemove]];
} completion:nil];
} …Run Code Online (Sandbox Code Playgroud) objective-c ios uicollectionview uicollectionviewlayout uikit-dynamics
我知道外部改变了center,bounds并且transform在UIDynamicItem初始化后会被忽略.
但我需要手动更改transform的UIView,在UIDynamicAnimator系统中.
每次我改变transform它,它将立即被覆盖.
那么任何想法?谢谢.
在iOS中9苹果推出了collisionBoundsType到UIKit-Dynamics.
设置此项UIDynamicItemCollisionBoundsTypeRectangle或将其设置为时,我没有任何问题UIDynamicItemCollisionBoundsTypeEllipse.
下面的屏幕截图来自我正在制作的游戏,其中collisionBoundsType玩家设置为矩形并且球被设置为椭圆:
但是,当我将玩家设置collisionBoundsType为路径时,我会看到奇怪的行为:
视图看起来比它应该高,碰撞体位于它应该的位置.
目前我已经collisionBoundingPath设定了这个:
- (UIBezierPath *)collisionBoundingPath
{
maskPath = [[UIBezierPath alloc] init];
[maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
return maskPath;
}
Run Code Online (Sandbox Code Playgroud)
另外,我的drawRect函数如下所示:
- (void) drawRect:(CGRect)rect
{
if (!_color){
[self returnDefualtColor];
}
if (!maskPath) maskPath = [[UIBezierPath alloc] init];
[maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
[_color setFill];
[maskPath fill];
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?如何将碰撞体的路径设置为与视图中的图形相同?
另外,红色只是视图的背景(即view.backgroundColor = [UIColor redColor];).
我正在研究iOS开发.当我添加一个rect视图并希望它受重力影响,构建并运行我的测试应用程序时,我发现它确实没有引力.这是我的viewController.m中的viewDidLoad代码:
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *squre = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
squre.backgroundColor = [UIColor grayColor];
[self.view addSubview:squre];
UIDynamicAnimator *_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
UIGravityBehavior *_gravity = [[UIGravityBehavior alloc] initWithItems:@[squre]];
[_animator addBehavior:_gravity];
Run Code Online (Sandbox Code Playgroud)