首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollisionBehavior - UIView碰撞的自定义形状

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

Stack Overflow用户
提问于 2014-02-09 02:39:58
回答 1查看 3.6K关注 0票数 3

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

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

我确定我在什么地方见过这个,但我找不到任何官方来源的关于这个主题的文档或讨论。

EN

回答 1

Stack Overflow用户

发布于 2014-02-17 02:30:47

我也想这么做,但我不认为你能在目前的iOS 7的UIKit动态系统下做到这一点。添加到动画师的项目必须采用UIDynamicItem协议(UIView确实如此)。该协议仅通过CGRect属性将它们的边界指定为矩形。没有自定义的命中测试。

但是,您可以将固定的Bezier路径添加到碰撞集,它可以是圆形的,也可以是使用路径创建的任何形状,但它的行为类似于其他矩形对象从其上反弹的曲线墙。您可以在Xcode中修改DynamicsCatalog示例代码,以了解如何使用不移动的曲线边界。

创建一个名为BumperView的新视图文件,它是UIView的子类。在BumperView.m中,使用以下drawRect:

代码语言:javascript
复制
#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函数中添加以下内容:

代码语言:javascript
复制
UIBezierPath *bumperPath = [UIBezierPath bezierPathWithOvalInRect:self.bumper.frame];
[collisionBehavior addBoundaryWithIdentifier:@"Bumper" forPath:bumperPath];

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21650208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档