3

我想改变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)

他们都没有工作。如何改变 a 的视角UIView

换句话说,我将举一个例子。图片这个示例代码,一个旋转饼RotationPie 示例。我想改变它的视角,在 x 或 z 轴上。

4

1 回答 1

3

你的第一个解决方案对我有用。它看起来像这样:

在此处输入图像描述

你能展示你的整个班级代码吗,如果你的结果不一样吗?

编辑

好的,我已经重新配置了提供的代码示例,以展示它是如何实现的:

(在此处下载更新的代码示例:http ://www.speedyshare.com/dz469/download/Wheel-demo.zip )

它看起来像这样:

在此处输入图像描述

我只是将转换应用于基本子视图。作为该视图的子视图的所有视图也将被转换。如果您希望相应的子视图具有不同的转换 - 这会更难,因为,那么您必须考虑父视图转换,才能计算新的 - 它会变得非常困难。

但是我做了一些简单的——多视图级别的转换。例如 - 为了达到效果,视图缩放、移动和旋转:

  • 我已将运动转换应用于 parentView
  • 我已将旋转变换应用于 parentViews 的第一个子视图;
  • 我已将缩放转换应用于 parentViews 的第一个子视图子视图。

编辑

好的,我已经重新配置了提供的代码示例,以展示它是如何实现的,以便将轮子留在变换位置:

(在此处下载更新的代码示例: http ://www.speedyshare.com/5d8Xq/download/Wheel-demo2.zip )

问题是——在这种情况下,我正在向轮子本身添加转换——而且看来,轮子也是基于转换的。因此 - 当你触摸它时 - 它取代了现有的转换并应用了它自己的(当用户滑动滚轮时旋转箭头)。

所以 - 在我们与它交互时让它保持透视 - 我们需要另一个视图层。

我创建了一个新视图(我们称之为父视图),并将轮子作为子视图添加到该视图中。

然后我将转换应用于父视图而不是轮子。它有效!

我希望它有所帮助,您现在了解更多关于转换的信息:)

于 2012-10-16T10:25:44.240 回答