我想更改UIView
中Viewcontroller
的视角。我认为我必须转换这个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中改变它的角度。
答案 0 :(得分:3)
你的第一个解决方案适用于我。它看起来像这样:
如果你的代码在你的结尾不起作用,你能展示你的全班代码吗?
修改强>
好的,我已经重新配置了提供的代码示例,以显示它是如何实现的:
(在此下载更新的代码示例:http://www.speedyshare.com/dz469/download/Wheel-demo.zip)
它看起来像这样:
我只将转换应用于基础子视图。作为该视图的子视图的所有视图也将被转换。如果你想让相应的子视图有不同的转换 - 它会更难,因为,那么你必须考虑父视图转换,计算新的转换 - 它可能变得非常困难。
但我做了一些简单的多视图级别转换。例如 - 为了实现效果,该视图可以缩放,移动和旋转:
修改强>
好的,我已经重新配置了提供的代码示例,以显示它是如何可能的,以便将轮子保持在转换位置:
(在这里下载更新的代码示例: http://www.speedyshare.com/5d8Xq/download/Wheel-demo2.zip)
问题是 - 在这种情况下,我正在为车轮本身添加变换 - 而且看起来,Wheel也是基于变换。因此 - 当你触摸它时 - 它取代了现有的变换并应用它自己的(当用户滑动轮时旋转箭头)。
所以 - 在我们与它交互时保持透视 - 我们需要另一个视图层。
我创建了一个新视图(让我们称之为父视图),并将wheel作为子视图添加到此视图中。
然后我将转换应用于父View而不是wheel。它的工作原理!
我希望它有所帮助,你现在更了解转换:)