Xcode 旋转视图以提供透视图
我想更改我的Xcode 旋转视图以提供透视图,xcode,uiview,rotation,layer,perspective,Xcode,Uiview,Rotation,Layer,Perspective,我想更改我的Viewcontroller中的ui视图的透视图。我想我必须转换这个UIView层,但我不知道如何转换 我尝试了以下代码,但它不起作用 UIView *myView = [[self subviews] objectAtIndex:0]; CALayer *layer = myView.layer; CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity; rotationAndPerspective
Viewcontroller
中的ui视图的透视图。我想我必须转换这个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)
他们两个都不工作。如何更改ui视图的透视图
换言之,我将举一个例子。这个示例代码是一个旋转饼图。我想改变它的视角,在x或z方向。你的第一个解决方案对我有效。看起来是这样的:
如果你这边的代码不一样,你能展示你的整个类代码吗
编辑
好的,我已经重新配置了提供的代码示例,以展示它是如何实现的:
(此处下载更新的代码示例:)
看起来是这样的:
我只将转换应用于基本子视图。作为该视图的子视图的所有视图也将被转换。如果您希望相应的子视图具有不同的转换,这将更加困难,因为,您必须考虑父视图转换,以计算新的转换,这将变得非常困难
但是我做了一些简单的多视图级别的转换。例如-为了实现效果,视图将缩放、移动和旋转:
- 我已将运动变换应用于parentView
- 我已经将旋转变换应用于parentViews第一个子视图李>
- 我已将缩放变换应用于parentViews first子视图
编辑
好的,我已经重新配置了提供的代码示例,以说明如何使车轮保持在变换位置:
(此处下载更新的代码示例:
)
问题是——在本例中,我向轮子本身添加了转换——看起来轮子也是基于转换的。因此,当您触摸它时,它会替换现有的转换并应用它自己的转换(当用户滑动滚轮时旋转箭头)
因此,为了在与它交互时保持透视,我们需要另一个视图层
我创建了一个新视图(我们称之为父视图),并将轮子作为子视图添加到此视图中
然后我将转换应用于父视图,而不是轮子。而且它有效
我希望这有助于您了解更多关于转换的信息:)在我的情况下,它不起作用。我有几个小视图在同一个视图中(作为容器视图)。当y尝试进行透视图更改时,小视图会彼此分离。我还想在另一个轴上旋转或透视,这是透视。通过改变m34参数和变换角度可以改变透视图。(选中最左箭头和最右箭头。其中一个看起来比另一个大-因此它是透视图。)另外-将背景颜色设置为父子视图,以查看它是否实际处于透视图中。很高兴我能提供帮助:)您应该查看-(void)touchesMoved:(NSSet*)toucheevent:(UIEvent*)事件-存储angleInRadians值,并将其与设置转换之前保存的值进行比较,以确定它是朝相反的方向还是朝正确的方向进行(然后相应地允许或不允许转换);看起来在一个方向上总是负面的。但经过进一步测试,我的建议似乎行不通。对不起,这不是我的强项。我建议创建一个新问题(以吸引更多的人),使用相同的项目链接、touchesModed的示例代码和问题-如何只允许在一个方向上进行转换。祝你好运