我正在试图弄清楚如何使用UIKit Dynamics成功碰撞两个具有自定义边界形状的UIView。
我能想到解释我的问题的最基本的例子是让两个圆碰撞(考虑他们的圆角)而不是他们的方边界。
我确定我已经在某个地方看到了这个,但我找不到任何官方来源关于这个主题的任何文件或讨论。
答案 0 :(得分:5)
我也想这样做,但我认为你不能在目前的UIKit Dynamics for iOS 7下做到这一点。添加到动画师的项目必须采用UIDynamicItem协议(UIView)。协议仅通过bounds属性(CGRect)将其边界指定为矩形。没有自定义命中测试。
但是,您可以在碰撞集中添加固定的贝塞尔曲线路径,它可以是圆形或任何可以用路径制作的形状,但它的作用就像弯曲的墙壁,其他矩形物体反弹。您可以在Xcode中修改DynamicsCatalog示例代码,以查看使用不移动的曲线边界。
创建一个名为BumperView的新视图文件,UIView的子类。 在BumperView.m中,使用此drawRect:
#define LINE_WIDTH 2.0
- (void)drawRect:(CGRect)rect
{
UIBezierPath *ovalPath = [UIBezierPath bezierPathWithOvalInRect:CGRectInset(self.bounds, LINE_WIDTH/2, LINE_WIDTH/2)];
[[UIColor blueColor] setStroke];
[[UIColor lightGrayColor] setFill];
ovalPath.lineWidth = LINE_WIDTH;
[ovalPath stroke];
[ovalPath fill];
}
在“项目属性”页面的故事板中,在框下方的某处添加“视图”,并将其类更改为“BumperView”,并将其背景颜色更改为“清除”。 在APLItemPropertiesViewController.m中为它创建一个名为bumper的插座,但是给它类BumperView。 在创建了collisionBehavior之后,在viewDidAppear函数中添加以下内容:
UIBezierPath *bumperPath = [UIBezierPath bezierPathWithOvalInRect:self.bumper.frame];
[collisionBehavior addBoundaryWithIdentifier:@"Bumper" forPath:bumperPath];
运行它并转到“项目属性”页面以查看矩形从椭圆形反弹。