tom*_*924 19 cgaffinetransform ios
我正在尝试使用CGAffineTransformMakeRotation,我参考了Apple文档
以弧度表示的角度,此矩阵旋转坐标系轴.在iOS中,正值指定逆时针旋转,负值指定顺时针旋转.在OS X中,正值指定顺时针旋转,负值指定逆时针旋转.
所以,我传递参数90度,它应该逆时针旋转.
self.myView是灰色背景色视图,红色方块视图仅用于查看旋转方向
#define DEGREES_TO_RADIANS(x) (x * M_PI/180.0)
CGAffineTransform rotation = CGAffineTransformMakeRotation( DEGREES_TO_RADIANS(90) );
[self.myView setTransform:rotation];
Run Code Online (Sandbox Code Playgroud)
但为什么它顺时针旋转?
我正在尝试使用模拟器和设备都有相同的结果,顺时针旋转
然后tring使用动画:
#define DEGREES_TO_RADIANS(x) (x * M_PI/180.0)
CGAffineTransform rotation = CGAffineTransformMakeRotation( DEGREES_TO_RADIANS(90) );
[UIView animateWithDuration:0.5
animations:^{
self.myView.transform = rotation;
}
completion:^(BOOL finished) {
NSLog(@"%@", NSStringFromCGAffineTransform(self.myView.transform));
}];
Run Code Online (Sandbox Code Playgroud)
它具有相同的结果,顺时针旋转.
有人可以解释原因,谢谢你的回复.
这实际上是正确的行为,文档正确描述了它.
你在这里处理两个不同的坐标系.Core Graphics的坐标系左下角有(0,0),但UIKit的坐标系左上角有(0,0).两个坐标系都有一个X轴,左边是0.换句话说,UIKit的坐标系是垂直翻转的Core Graphics坐标系.下图显示了不同之处:
现在,让我们来看看你的报价:
以弧度表示的角度,此矩阵旋转坐标系轴.在iOS中,正值指定逆时针旋转,负值指定顺时针旋转.
乍一看似乎错了,但你错过了什么.这是来自CGAffineTransformMakeRotation参考的引用.这是Core Graphics参考的一部分,而不是UIKit参考.它指的是Core Graphics坐标系中的逆时针旋转.
您可以通过在屏幕上垂直翻转您所看到的内容并想象旋转的样子来描绘您的头部旋转.
事实上,CGAffineTransformMakeRotation参考有一个讨论项目,继续记录这个:
实际旋转方向取决于目标平台的坐标系方向,这在iOS和macOS中是不同的.
关于CGContext的rotate(by :)方法参考的讨论项目更好地描述了这种行为:
在执行该函数之前,上下文旋转的方向可能看起来被当前变换矩阵的状态改变.例如,在iOS上,UIView将转换应用于反转Y轴的图形上下文(通过将其乘以-1).在先前翻转的坐标系上旋转用户坐标系导致在相反方向上旋转(即,正值似乎沿顺时针方向旋转坐标系).
要获得逆时针旋转..使你的角度为-ve,例如:
*
imageToBeRotated.transform = CGAffineTransformMakeRotation(-angle); // for anti-clockwise rotation
imageToBeRotated.transform = CGAffineTransformMakeRotation(angle); // for clockwise rotation
Run Code Online (Sandbox Code Playgroud)
*
归档时间: |
|
查看次数: |
17100 次 |
最近记录: |