我有一个UIView子类对象,初始高度为obj.frame.size.height。
UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(...)];
imageView setImage:...
//here comes rotation
我有一个变量double newHeight(它小于obj的初始高度) 我需要用x轴旋转obj。 旋转后obj的高度必须改为newHeight 我怎么能这样做?
答案 0 :(得分:2)
您可以使用QuartzCore转换来实现此目的。首先,如果还没有完成,你必须添加QuartzCore框架。现在,在相应的文件中导入<QuartzCore/QuartzCore.h>
。在x轴上实现翻转并调整到新高度的示例转换可能如下所示:
CALayer *testLayer = test1.layer;
double oldSize = test1.bounds.size.height;
double newSize = 100.0;
testLayer.transform = CATransform3DConcat(CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0),
CATransform3DMakeScale(1.0, newSize/oldSize, 1.0)
);
test1
这里是需要转换的视图。这是通过首先围绕y轴旋转半圈(以弧度表示的PI)来实现的(这有效地向左和向右翻转)。然后缩放变换将x和z保持原样,但是缩放y以使新高度完全是所需的newSize
。请注意,此转换仅更改渲染。例如,如果您现在将视图的bounds
更改为新高度,则转换将应用于该转换,您将对新(较大/较小)对象进行两次缩放。
根据所需的旋转,您还可以沿x轴旋转以上下翻转或绕z进行任意旋转,例如: CATransform3DMakeRotation(M_PI_4,0.0,0.0,1.0)顺时针旋转45度。还要注意转换的顺序,因为这会导致不良影响。