使用SpriteKit渲染时iOS UIBezierPath是颠倒的吗?

时间:2014-05-21 16:30:10

标签: ios uibezierpath

使用顶部/左侧具有原点(0,0)的数据点定义轨道路径。 从这些点开始创建UIBezierPath

沿着路径的汽车移动以距离给出,从中计算百分比。 UIBezierPath上的类别提供了沿路径的汽车坐标。

#import "UIBezierPath-Points.h"
CGPoint currCoordinates = [self.trackPath pointAtPercent:percent withSlope:nil];

问题在于SpriteKit会将轨道路径颠倒过来。

SKScene班级......

SKShapeNode *shapeNode = [[SKShapeNode alloc] init];
[shapeNode setPath:self.trackPath.CGPath];            <== path is rendered upside-down?
[shapeNode setPath:cgPath];
[shapeNode setStrokeColor:[UIColor blueColor]];
[self addChild:shapeNode];

我尝试了UiBezierPath上的各种变换,但无法将坐标转换为SpriteKit坐标,我认为这些坐标是基于中心的。

有谁知道如何从UIBezierPath坐标转换为SpriteKit(SKScene)坐标?

*没有enuf声望来发布图片。

1 个答案:

答案 0 :(得分:1)

对不起,我觉得这是不言自明的。

来自Source

void ApplyCenteredPathTransform(UIBezierPath *path, CGAffineTransform transform)
{
    CGRect rect = CGPathGetPathBoundingBox(path.CGPath); 
    CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
    CGAffineTransform t = CGAffineTransformIdentity;
    t = CGAffineTransformTranslate(t, center.x, center.y);
    t = CGAffineTransformConcat(transform, t);
    t = CGAffineTransformTranslate(t, -center.x, -center.y);
    [path applyTransform:t];
}

void ScalePath(UIBezierPath *path, CGFloat sx, CGFloat sy)
{
    CGAffineTransform t = CGAffineTransformMakeScale(sx, sy);
    ApplyCenteredPathTransform(path, t);
}

然后

ScalePath(path, 1.0, -1.0);