我正在尝试将iOS代码转换为OSX代码,并且在图形移植方面遇到一些困难。
在iOS下我有这个:
NSRect rect = NSMakeRect(centerX.doubleValue - width.doubleValue / 2,
centerY.doubleValue - height.doubleValue / 2,
width.doubleValue, height.doubleValue);
UIBezierPath * path = nil;
switch (self.shape)
{
case HSTargetShapeInvisible:
path = [UIBezierPath bezierPath];
break;
case HSTargetShapeOval:
path = [UIBezierPath bezierPathWithOvalInRect:rect];
break;
case HSTargetShapeRectangle:
path = [UIBezierPath bezierPathWithRect:rect];
break;
default:
break;
}
CGAffineTransform translate = CGAffineTransformMakeTranslation(-1 * centerX.doubleValue,
-1 * centerY.doubleValue);
[path applyTransform:translate];
CGAffineTransform rotate = CGAffineTransformMakeRotation(rotation.doubleValue / 180 * M_PI);
[path applyTransform:rotate];
translate = CGAffineTransformMakeTranslation(centerX.doubleValue, centerY.doubleValue);
[path applyTransform:translate];
这完美地工作了......然后我用OSX这样重写了它:
NSRect rect = NSMakeRect(centerX.doubleValue - width.doubleValue / 2,
centerY.doubleValue - height.doubleValue / 2,
width.doubleValue, height.doubleValue);
NSBezierPath * path = nil;
switch (self.shape)
{
case HSTargetShapeInvisible:
path = [NSBezierPath bezierPath];
break;
case HSTargetShapeOval:
path = [NSBezierPath bezierPathWithOvalInRect:rect];
break;
case HSTargetShapeRectangle:
path = [NSBezierPath bezierPathWithRect:rect];
break;
default:
break;
}
NSAffineTransform *rot = [NSAffineTransform transform];
NSAffineTransform *pos = [NSAffineTransform transform];
[pos translateXBy:-1*centerX.doubleValue yBy:-1*centerY.doubleValue];
[rot rotateByRadians:rotation.doubleValue / 180 * M_PI];
[pos translateXBy:centerX.doubleValue
yBy:centerY.doubleValue ];
[rot appendTransform:pos];
[path transformUsingAffineTransform:rot];
这不起作用。有谁知道问题在哪里?!
非常感谢任何形式的帮助!
答案 0 :(得分:1)
您的原始代码使用了三种转换,您现在尝试使用两种转换。回到三点(使用不同的变量来说清楚):
NSAffineTransform *pos1 = [NSAffineTransform transform];
[pos1 translateXBy:-1*centerX.doubleValue yBy:-1*centerY.doubleValue];
[path transformUsingAffineTransform:pos1];
NSAffineTransform *rot = [NSAffineTransform transform];
[rot rotateByRadians:rotation.doubleValue / 180 * M_PI];
[path transformUsingAffineTransform:rot];
NSAffineTransform *pos2 = [NSAffineTransform transform];
[pos2 translateXBy:centerX.doubleValue yBy:centerY.doubleValue];
[path transformUsingAffineTransform:pos2];
如果您只想使用一个transformUsingAffineTransform:
,可以删除上述三种用途并添加代码:
[pos1 appendTransform:rot];
[pos1 appendTransform:pos2];
[path transformUsingAffineTransform:pos1];
你甚至可以用一个,但记下订单 - 从最后到第一个工作:
NSAffineTransform *compound = [NSAffineTransform transform];
[compound translateXBy:centerX.doubleValue yBy:centerY.doubleValue];
[compound rotateByRadians:rotation.doubleValue / 180 * M_PI];
[compound translateXBy:-1*centerX.doubleValue yBy:-1*centerY.doubleValue];
[path transformUsingAffineTransform:compound];
HTH