我添加了CALayer并按以下方式进行了转换。我认为旋转之前通过任何常数平移该层都不会影响绕Y轴的旋转,但似乎有所不同,我在这里缺少什么?
- (void)viewDidAppear:(BOOL)animated
{
CALayer* layer = [CALayer layer];
layer.bounds = self.img1.bounds;
layer.backgroundColor = [[UIColor grayColor] CGColor];
layer.anchorPoint = CGPointMake(0, 0.5);
layer.position = CGPointMake(0, CGRectGetMidY(self.view.bounds));
layer.contents = (id)[self.img1.image CGImage];
layer.transform = [self transformforView1];
[self.view.layer addSublayer:layer];
}
没有任何平移和输出的旋转:
- (CATransform3D)transformforView1
{
CATransform3D t = CATransform3DIdentity;
t.m34 = 1.0/-700;
t = CATransform3DTranslate(t, 0, 0, 0);
t = CATransform3DRotate(t, degToRad(45), 0, 1, 0);
return t;
}
旋转500和输出相同的旋转:
- (CATransform3D)transformforView1
{
CATransform3D t = CATransform3DIdentity;
t.m34 = 1.0/-700;
t = CATransform3DTranslate(t, 500, 0, 0);
t = CATransform3DRotate(t, degToRad(45), 0, 1, 0);
return t;
}
这实际上是一个很好的问题。造成混淆的原因是,模型视图矩阵和投影矩阵通常是分开的。
阅读此问题以供参考:
我建议您将“模型视图矩阵”和“投影矩阵”分开。
因此,您的CATransform3D t实际上是两个矩阵的串联,您可以添加另一个转换以在视图中移动模型,或者创建另一个变换(您的模型视图矩阵)。这是我在这里所做的:
CATransform3D modelViewTransform = CATransform3DMakeTranslation([UIScreen mainScreen].bounds.size.height / 2.0, 0, 0);
CATransform3D t = CATransform3DIdentity;
t.m34 = 1.0/-700;
t = CATransform3DTranslate(t, 500, 0, 0);
t = CATransform3DRotate(t, degToRad(45), 0, 1, 0);
return CATransform3DConcat(t, modelViewTransform);
这会将模型移动到屏幕的中心,而不是移动到屏幕的边缘。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句