2011-11-24 115 views
1

我有一个初始高度为obj.frame.size.height的UIView子类。旋转UIView对象x轴

UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(...)]; 
imageView setImage:... 
//here comes rotation 

我具有可变的双newHeight(它小于物镜的初始高度) 我需要通过x轴旋转的obj。 旋转后obj的高度必须改为newHeight 我该怎么做?

+0

旋转不一定是动画。我只需要在我的UIView上放置一个对象,以便旋转x轴 – Oleg

回答

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轴旋转以上下或上下任意旋转,例如, CATransform3DMakeRotation(M_PI_4,0.0,0.0,1.0)顺时针旋转45度。也要小心转换顺序,因为这会导致不良影响。

+0

如果test1视图包含按钮,它们在进行转换时是否会正常工作? – Oleg

+0

刚刚经过测试转换UIButton:显然他们确实正常工作,甚至对变化的区域作出反应。请注意,虽然实际渲染的图形正在转换,但如果缩放太多,butotns可能看起来很奇怪。 –

+0

谢谢你的帮助 – Oleg