我想改变我的Viewcontroller中的UIView的视角。我认为我必须转换这个UIView层,但我不知道如何转换。
我尝试了下面的代码,但它不起作用
UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;我还尝试了以下代码:
-(void)drawRect:(CGRect)rect {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGAffineTransform transform = CGAffineTransformIdentity;
transform.b = -0.1;
transform.a = 0.9;
CGContextConcatCTM(ctx,transform);
// do drawing on the context
}还有这个:
CALayer *layerA = [[self.view.layer sublayers] objectAtIndex:0];
layerA.transform = CATransform3DConcat(layerA.transform, CATransform3DMakeRotation(DEGREES_TO_RADIANS(45),1.0,0.0,0.0)他们两个都不管用。如何改变UIView的视角?
换句话说,我将举一个例子。想象一下这个样例代码,一个旋转馅饼RotationPie sample。我想改变它的视角,在x或z asis中。
发布于 2012-10-16 18:25:44
您的第一个解决方案适用于我这一端。它看起来像这样:

你能展示你的整个类代码吗,如果它在你那端不一样的话?
编辑
好了,我已经重新配置了提供的代码示例,以展示它是如何实现的:
(在这里下载更新的代码示例:http://www.speedyshare.com/dz469/download/Wheel-demo.zip)
它看起来像这样:

我只是将转换应用于基子视图。作为该视图的子视图的所有视图也将被转换。如果你想让相应的子视图有不同的转换-这会更难,因为,然后你必须考虑父视图转换,来计算新的转换-这可能会变得非常困难。
但我已经做了一些简单的多视图级转换。例如,为了达到效果,视图进行缩放、移动和旋转:
编辑
好了,我已经重新配置了所提供的代码示例,以显示它是如何可能的,以便将轮子留在变换位置:
(在这里下载更新的代码示例:http://www.speedyshare.com/5d8Xq/download/Wheel-demo2.zip )
问题是-在这种情况下,我将变换添加到轮子本身-看起来,轮子也是基于变换的。因此,当你触摸它时,它会替换现有的变换,并应用它自己的(当用户滑动滚轮时旋转箭头)。
因此,当我们与它交互时,为了让它处于透视状态,我们需要另一个视图层。
我创建了一个新的视图(让我们称它为父视图),并将轮子作为子视图添加到此视图中。
然后,我将转换应用于父视图,而不是轮子。而且它起作用了!
我希望它对您有所帮助,您现在可以更多地了解转换:)
https://stackoverflow.com/questions/12911255
复制相似问题