我正在尝试弄清楚如何使用UIKit动态成功地碰撞两个具有自定义边界形状的UIViews。
我能想到的解释我的问题的最基本的例子是让两个圆碰撞(考虑到它们的圆角),而不是它们的方形边界。
我确定我在什么地方见过这个,但我找不到任何官方来源的关于这个主题的文档或讨论。
发布于 2014-02-17 02:30:47
我也想这么做,但我不认为你能在目前的iOS 7的UIKit动态系统下做到这一点。添加到动画师的项目必须采用UIDynamicItem协议(UIView确实如此)。该协议仅通过CGRect属性将它们的边界指定为矩形。没有自定义的命中测试。
但是,您可以将固定的Bezier路径添加到碰撞集,它可以是圆形的,也可以是使用路径创建的任何形状,但它的行为类似于其他矩形对象从其上反弹的曲线墙。您可以在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];
}在Item Properties页面的情节提要中,在框下面的某个位置添加一个视图,将其类更改为BumperView,并将其背景颜色更改为clear。在APLItemPropertiesViewController.m中创建一个名为bumper的outlet,但为它提供类BumperView。在创建collisionBehavior之后,在viewDidAppear函数中添加以下内容:
UIBezierPath *bumperPath = [UIBezierPath bezierPathWithOvalInRect:self.bumper.frame];
[collisionBehavior addBoundaryWithIdentifier:@"Bumper" forPath:bumperPath];运行它并转到Item Properties页面,以查看矩形从椭圆弹出。
https://stackoverflow.com/questions/21650208
复制相似问题