在xcode中旋转子图层

时间:2015-01-11 03:12:49

标签: xcode rotation

已经有一段时间了,因为我在一次摩托车事故后住院了3个月。 所以我只需更新我的苹果编程订阅: - )

我有另一个问题,已经有很长一段时间了。 在我的iPad应用程序中,我在iPad的中心画一个三角形,如下所示:

- (void)initTriangle
{
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

// draw triangle (TRIANGLE)
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,NULL, 0.5*screenWidth, 0.5*screenHeight-25);
CGPathAddLineToPoint(path, NULL, 0.5*screenWidth-25, 0.5*screenHeight+25);
CGPathAddLineToPoint(path, NULL, 0.5*screenWidth+25, 0.5*screenHeight+25);
CGPathAddLineToPoint(path, NULL, 0.5*screenWidth, 0.5*screenHeight-25);

CAShapeLayer *triangle = [CAShapeLayer layer];
[triangle setPath:path];
[triangle setFillColor:[[UIColor blackColor] CGColor]];
[[[self view] layer] addSublayer:triangle];

CGPathRelease(path);
}

我从我的viewDidLoad这样称呼它:

[self initTriangle];

现在我试图旋转这个三角形,同时我的iPad围绕Z轴旋转,同时平放在桌子上。我有一个功能,给我浮动的偏航读数,我打电话给我      - (无效)updateTriangleWithYaw:(浮点)的偏航 方法,但我不知道该把它放在那里让它旋转。

这是我的方法到目前为止的样子:

-(void)updateTriangleWithYaw:(float)yaw
{
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

NSLog(@"YAW: %f", yaw);
Z += 2 * yaw;
Z *= 0.8;

CGFloat newR = R + 10 * yaw;

self.triangle.frame = CGRectMake(0.5*screenWidth, 0.5*screenHeight, newR, newR);
}

任何帮助将不胜感激!

谢谢并且安全!!!

1 个答案:

答案 0 :(得分:0)

您应该设置图层affineTransform。您可以应用旋转变换,如:

[self.triangle setAffineTransform:CGAffineTransformMakeRotation(yaw)];

此方法setAffineTransform可以方便地设置图层的transform属性,这是一种更为通用的转换类型CATransform3D。您也可以直接设置图层的transform,如果您想这样做,可以围绕z轴进行旋转,如:

self.triangle.transform = CATransform3DMakeRotation(yaw, 0, 0, 1);

在这种情况下,第一个参数是角度(以弧度表示),后三个参数指定旋转轴。

请注意,您不应分配或依赖其转换不是标识(frame)的图层的CGAffineTransformIdentity属性的值。当您使用转换属性时,您应该通过指定图层的centerbounds属性来设置图层的大小和位置,同样您应该阅读center和{ {1}}当您想要了解有关图层位置和大小的信息时。