gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:16 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com