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

Wye*_*tro 7 objective-c ios uicollisionbehavior uikit-dynamics tvos

在iOS中9苹果推出了collisionBoundsTypeUIKit-Dynamics.

设置此项UIDynamicItemCollisionBoundsTypeRectangle或将其设置为时,我没有任何问题UIDynamicItemCollisionBoundsTypeEllipse.

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

在此输入图像描述

但是,当我将玩家设置collisionBoundsType为路径时,我会看到奇怪的行为:

在此输入图像描述

视图看起来比它应该高,碰撞体位于它应该的位置.

目前我已经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;
}
Run Code Online (Sandbox Code Playgroud)

另外,我的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];
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如何将碰撞体的路径设置为与视图中的图形相同?

另外,红色只是视图的背景(即view.backgroundColor = [UIColor redColor];).

Ror*_*nel 2

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

\n\n
\n

您创建的路径对象必须表示逆时针或顺时针缠绕的凸多边形,并且路径不得与自身相交。路径的 (0, 0) 点必须位于相应动态项的中心点。如果中心点与路径\xe2\x80\x99s 原点不匹配,碰撞行为可能无法按预期工作。

\n
\n\n

这里它指出(0,0)路径必须是中心点。

\n\n

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

\n\n

SLIME_SIZE似乎确实定义了半径,所以框架宽度应该是SLIME_SIZE*2。如果它设置为SLIME_SIZE,那么这就解释了为什么您需要翻译为SLIME_SIZE/2作为更正。

\n