ios – 如何使用setValue创建与另一个匹配的CATransform3D:forKey:

ios – 如何使用setValue创建与另一个匹配的CATransform3D:forKey:,第1张

概述我试图创建一个CATransform3D,但是错了.以下代码使用键值执行我想要的 *** 作: [_transitionLayer setValue:[NSNumber numberWithFloat:metrics.translationPointsX] forKeyPath:@"sublayerTransform.translation.x"];[_transitionLayer setV 我试图创建一个CAtransform3D,但是错了.以下代码使用键值执行我想要的 *** 作:

[_TransitionLayer setValue:[NSNumber numberWithfloat:metrics.translationPointsX]     forKeyPath:@"sublayertransform.translation.x"];[_TransitionLayer setValue:[NSNumber numberWithfloat:metrics.radians]     forKeyPath:@"sublayertransform.rotation.y"];[_TransitionLayer setValue:[NSNumber numberWithfloat:metrics.translationPointsZ]     forKeyPath:@"sublayertransform.translation.z"];

以下是我尝试将其设置为CAtransform3D的方式:

subLayertransform.m34 = -0.000555;CAtransform3D subLayertransform = CAtransform3DMakeTranslation(0,0);subLayertransform =     CAtransform3DTranslate(subLayertransform,metrics.translationPointsX,0);subLayertransform =     CAtransform3DRotate(subLayertransform,metrics.radians,1,metrics.translationPointsZ);

如何使用键路径创建匹配变换?

解决方法 看看你的两个截图,并假设你正在寻找一个旋转的立方体效果,并且两个截图是在动画中略有不同的时间拍摄的,看起来顶部的截图有透视效果,而底部截图没有.

修复此问题很简单,只需编辑变换的.m34值,通常为小值,例如1/500.这个here有一个很好的写作.

完成后,您需要在轮换之前应用转换步骤,如下所示:

CAtransform3D subLayertransform = CAtransform3DMakeTranslation(0,0);subLayertransform.m34 = -0.000555;subLayertransform = CAtransform3DTranslate(subLayertransform,_currentMetrics.translationPointsX,_currentMetrics.translationPointsZ);subLayertransform = CAtransform3DRotate(subLayertransform,_currentMetrics.radians,0);

我已经做了类似的事情,但使用了容器视图控制器从一个转换到下一个.在评论你的代码时,我认为我使用了z锚点,但事实证明我没有.这是我用来从一个视图控制器转换到另一个视图控制器的代码,就像你在旋转一个立方体一样.它可能是有意义的.这只是较大方法的摘录,希望我没有错过任何重要的东西.

CGRect newFrame = self.containerVIEw.bounds;UIVIEw *outgoingVIEw = _currentVIEwController.vIEw;UIVIEw *incomingVIEw = currentVIEwController.vIEw;incomingVIEw.frame = newFrame;[CATransaction begin];[CATransaction setdisableActions:YES];CAtransform3D parent = CAtransform3DIDentity;parent.m34 = -0.003;self.containerVIEw.layer.sublayertransform = parent;BOol rightToleft = (_currentVIEwController == [self.vIEwControllers itemBefore:currentVIEwController]);CGfloat inTranslateX = incomingVIEw.bounds.size.wIDth;CGfloat inRotation = M_PI_2;CGfloat inAnchorX = 0.0;if (!rightToleft){    inTranslateX = -inTranslateX;    inRotation = -inRotation;    inAnchorX = 1.0;}CAtransform3D inT = CAtransform3DMakeTranslation(inTranslateX,0.0,0.0);inT = CAtransform3DRotate(inT,inRotation,1.0,0.0);CGRect prevIoUsFrame = incomingVIEw.frame;incomingVIEw.layer.anchorPoint = CGPointMake(inAnchorX,0.5);incomingVIEw.frame = prevIoUsFrame;incomingVIEw.layer.transform = inT;incomingVIEw.hIDden = NO;CGfloat outTranslateX = -outgoingVIEw.bounds.size.wIDth;CGfloat outRotation = -M_PI_2;CGfloat outAnchorX = 1.0;if (!rightToleft){    outTranslateX = -outTranslateX;    outRotation = -outRotation;    outAnchorX = 0.0;}CAtransform3D outT = CAtransform3DMakeTranslation(outTranslateX,0.0);outT = CAtransform3DRotate(outT,outRotation,0.5,0.0);CGRect outgoingFrame = outgoingVIEw.frame;outgoingVIEw.layer.anchorPoint = CGPointMake(outAnchorX,0.5);outgoingVIEw.frame = outgoingFrame;[CATransaction commit];[self TransitionFromVIEwController:_currentVIEwController                  toVIEwController:currentVIEwController                          duration:0.4                           options:UIVIEwAnimationCurveEaseInOut                        animations:^{                            outgoingVIEw.layer.transform = outT;                            incomingVIEw.layer.transform = CAtransform3DIDentity;                        }                        completion:^(BOol finished) {                            _currentVIEwController = currentVIEwController;                            outgoingVIEw.layer.transform = CAtransform3DIDentity;                            self.imageVIEw.image = currentVIEwController.tabbarItem.image;                            self.vIEwSelector.userInteractionEnabled = YES;                        }];

为了试验3D变换,我创建了一个小的演示应用程序,允许您构建一堆变换并查看效果.它于GitHub年推出,并于here推出.

总结

以上是内存溢出为你收集整理的ios – 如何使用setValue创建与另一个匹配的CATransform3D:forKey:全部内容,希望文章能够帮你解决ios – 如何使用setValue创建与另一个匹配的CATransform3D:forKey:所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1065072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存