具有非矩形边界的 UIDynamicItem

Posted

技术标签:

【中文标题】具有非矩形边界的 UIDynamicItem【英文标题】:UIDynamicItem with non-rectangular bounds 【发布时间】:2014-02-24 22:42:07 【问题描述】:

所以我正在研究 UIKit Dynamics,我遇到的一个问题是,如果我想使用自定义 drawRect: 创建一个 UIView(例如,假设我想绘制一个三角形),似乎有无法指定用于 UICollisionBehavior 的 UIView(或者更确切地说是 UIDynamicItem)的路径。

我的真正目标是让屏幕上的多边形完全按照人们的预期相互碰撞。

我想出了一个将多个视图拼接在一起的解决方案,但这对于我想要的东西来说似乎有点过头了。

有一些简单的方法可以做到这一点,还是我真的必须将视图拼接在一起?

【问题讨论】:

【参考方案1】:

观看有关此主题的 WWDC 2013 视频。它们非常清楚:为了效率和速度,在碰撞期间只有视图的(矩形)边界很重要。

编辑ios 9 中,动态项目可以有自定义的碰撞边界。你可以有一个由框架决定的矩形,一个由框架决定的椭圆,或者一个自定义的形状——一个逆时针凸的简单封闭 UIBezierPath。相关属性 collisionBoundsType 和(对于自定义形状)collisionBoundingPath 是只读的,因此您必须进行子类化才能设置它们。

【讨论】:

我刚看完第一个视频,我不记得他们说过,但我还有第二个视频(高级动态)要观看,所以我认为它就在那里。我想我要开始缝合了! iOS 9 增加了这个能力【参考方案2】:

如果你真的想碰撞多边形,你可以考虑 SpriteKit 及其物理引擎(它似乎与 UIDynamics 有很多共同点)。它可以与 UIKit 混合,虽然可能不如你想的那么流畅。

【讨论】:

以上是关于具有非矩形边界的 UIDynamicItem的主要内容,如果未能解决你的问题,请参考以下文章

查找具有内容的区域并获取其边界矩形

UIView 的边界矩形可以大于框架矩形是不是有意义?

在 OpenCV 中选择图像的非矩形 ROI 的最有效方法是啥?

具有六边形触摸边界的 Android Hexagon 形状按钮

Sprite Sheet自动检测单个Sprite界限

opencv 7 -- 边界矩形