ios - UICollisionBehavior - UIView 碰撞的自定义形状

标签 ios objective-c uiview uikit-dynamics uicollisionbehavior

我正在尝试弄清楚如何使用 UIKit Dynamics 成功地碰撞两个具有自定义边界形状的 UIView。

我能想到的最基本的例子来解释我的问题是让两个圆碰撞(考虑到它们的圆角)而不是它们的方形边界。

我确定我在某个地方看到过这个,但我无法从任何官方来源找到关于该主题的任何文档或讨论。

最佳答案

我也想这样做,但我认为您不能在当前的 iOS 7 UIKit Dynamics 下做到这一点。添加到动画器的项目必须采用 UIDynamicItem 协议(protocol)(UIView 可以)。该协议(protocol)仅通过 bounds 属性将它们的边界指定为矩形,这是一个 CGRect。没有自定义 HitTest 。

但是,您可以将固定的贝塞尔曲线路径添加到碰撞集中,它可以是圆形或您可以用路径制作的任何形状,但它会像其他矩形对象反弹的弯曲墙一样。您可以修改 Xcode 中的 DynamicsCatalog 示例代码,以查看不移动的弯曲边界的使用。

创建一个名为 BumperView 的新 View 文件,它是 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 页面的 Storyboard 中,在框下方某处添加一个 View 并将其类更改为 BumperView,并将其背景颜色更改为清除。 在 APLItemPropertiesViewController.m 中为它创建一个名为 bumper 的导出,但给它类 BumperView。 在创建 collisionBehavior 之后,在 viewDidAppear 函数中添加以下内容:

UIBezierPath *bumperPath = [UIBezierPath bezierPathWithOvalInRect:self.bumper.frame];
[collisionBehavior addBoundaryWithIdentifier:@"Bumper" forPath:bumperPath];

运行它并转到 Item Properties 页面以查看矩形从椭圆形反弹。

关于ios - UICollisionBehavior - UIView 碰撞的自定义形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21650208/

相关文章:

ios - 在 iOS 的 cocos2d 中添加颜色

iphone - 删除dealloc中的所有 subview ?

ios - StackViews View 和阴影

ios - 如何裁剪带有重复半圆的 UIView?

ios - Core-Plot 正确格式化图形

ios - 向分组的 UITableView 添加阴影

iphone - Objective C - 类别中的静态变量

objective-c - 分析器声称某个对象在未释放时已被释放

iOS 应用程序在调用 Web 服务最佳实践之前确保互联网可用

ios - 如何快速在MKMapview上显示MKPinAnnotationView