gpt4 book ai didi

ios - 在 iOS 9 中设置 UIView 的碰撞边界路径

转载 作者:可可西里 更新时间:2023-11-01 03:32:11 24 4
gpt4 key购买 nike

在 iOS 9 中,Apple 将 collisionBoundsType 引入了 UIKit-Dynamics

设置此 UIDynamicItemCollisionBoundsTypeRectangle 或将其设置为 UIDynamicItemCollisionBoundsTypeEllipse 时没有问题。

下面的屏幕截图来 self 正在制作的游戏,其中玩家的 collisionBoundsType 设置为矩形,球设置为椭圆:

enter image description here

但是,当我将玩家的 collisionBoundsType 设置为路径时,我会出现奇怪的行为,如下所示:

enter image description here

View 看起来比它应该的高,碰撞体在它应该在的地方的右边。

目前我将 collisionBoundingPath 设置为:

- (UIBezierPath *)collisionBoundingPath
{
maskPath = [[UIBezierPath alloc] init];
[maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
return maskPath;
}

此外,我的 drawRect 函数如下所示:

- (void) drawRect:(CGRect)rect
{
if (!_color){
[self returnDefualtColor];
}
if (!maskPath) maskPath = [[UIBezierPath alloc] init];
[maskPath addArcWithCenter:CGPointMake(SLIME_SIZE, SLIME_SIZE) radius:SLIME_SIZE startAngle:0*M_PI endAngle:M_PI clockwise:NO];
[_color setFill];
[maskPath fill];
}

为什么会这样?如何设置碰撞体的路径与 View 中的绘图一致?

此外,红色只是 View 的背景(即 view.backgroundColor = [UIColor redColor];)。

最佳答案

来自 UIDynamicItem 的文档 here ,以下关于路径坐标系的陈述似乎代表了错误:

The path object you create must represent a convex polygon with counter-clockwise or clockwise winding, and the path must not intersect itself. The (0, 0) point of the path must be located at the center point of the corresponding dynamic item. If the center point does not match the path’s origin, collision behaviors may not work as expected.

这里声明路径的(0,0)必须是中心点。

我认为你的圆弧路径的中心应该是 (0,0) 而不是 (SLIME_SIZE/2,SLIME_SIZE/2)。您是否可能将 UIView 框架的宽度和高度设置为 SLIME_SIZE 而不是 SLIME_SIZE*2

SLIME_SIZE 似乎真的定义了半径,所以帧宽度应该是SLIME_SIZE*2。如果它被设置为 SLIME_SIZE,那么这就解释了为什么你需要通过 SLIME_SIZE/2 进行翻译作为更正。

关于ios - 在 iOS 9 中设置 UIView 的碰撞边界路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116686/

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