gpt4 book ai didi

iphone - 顺序 UIView 变换

转载 作者:行者123 更新时间:2023-12-03 21:04:16 26 4
gpt4 key购买 nike

我有一个关于将多个转换应用于 UIView 的问题。例如,当我围绕 UIView 的中心点旋转动画,然后尝试围绕其边界之外的点旋转它时,第二个动画就变得一团糟,例如它以与指定完全不同的方式抖动或旋转。如何才能使第一个动画不影响第二个动画,但在播放第二个动画时仍然存在?

编辑:这是代码。首先,我围绕其中心点旋转 View :

CALayer *layer = view.layer;

CATransform3D aTransform = CATransform3DIdentity;
CGFloat zDistance = 2000;
aTransform.m34 = 1.0 / -zDistance;
scrollView.layer.sublayerTransform = aTransform;

CGFloat subviewX = 0.5;
CGFloat subviewY = 0.5;
[self setAnchorPoint:CGPointMake(subviewX, subviewY) forView:view];

CATransform3D bTransform = CATransform3DIdentity;
CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform];
bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 1, 1, 0);
rotateAnim.duration=0.05;
rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform];
layer.transform = bTransform;
[layer addAnimation:rotateAnim forKey:nil];

现在图层已旋转,我想围绕左屏幕边框翻转它:

CALayer *layer = view.layer;

CATransform3D aTransform = CATransform3DIdentity;
CGFloat zDistance = 2000;
aTransform.m34 = 1.0 / -zDistance;
tileScrollView.layer.sublayerTransform = aTransform;

CGFloat subviewX = ((1/view.frame.size.width)*(view.frame.origin.x));
CGFloat subviewY = 0.5;
[self setAnchorPoint:CGPointMake(-subviewX, subviewY) forView:view];

CATransform3D bTransform = layer.transform;
CABasicAnimation *rotateAnim = [CABasicAnimation animationWithKeyPath:@"transform"];
rotateAnim.fromValue= [NSValue valueWithCATransform3D:bTransform];
bTransform = CATransform3DMakeRotation(-M_PI_2, 0, 1, 0);
rotateAnim.duration=0.2;
rotateAnim.toValue=[NSValue valueWithCATransform3D:bTransform];
layer.transform = bTransform;
[layer addAnimation:rotateAnim forKey:nil];

由于我想要翻转旋转的图层,因此我在第二个动画的开头放置了 CATransform3D bTransform = layer.transform 而不是 CATransform3D bTransform = CATransform3DIdentity,但同样,这只会让动画变得困惑

我遇到的另一个类似的问题是,我有一个包含 9 个 subview 的 UIView,其中一个 subview 每秒围绕其中心点翻转一次。但是每次我对这 9 个 UIView 的 superView 应用转换时, subview 的布局就会变得困惑。有谁知道如何防止这种情况?任何帮助将不胜感激。提前致谢!

最佳答案

有两件事:

  1. 在第一个转换中,您执行以下操作:

    bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 1, 1, 0);

    意味着您围绕 x 轴和 y 轴之间成 45° 的轴旋转。这可能就是您想要做的,但看起来很奇怪。考虑更改为

    bTransform = CATransform3DRotate(aTransform,-20*M_PI/180, 0, 1, 0);
  2. 在第二步中,如果您只想将变换添加到当前变换上(即再旋转 180°),则需要更改此行

    bTransform = CATransform3DMakeRotation(-M_PI_2, 0, 1, 0);

    bTransform = CATransform3DRotate(bTransform, -M_PI_2, 0, 1, 0);

    这会将转换应用于现有转换,而不是忽略当前转换。

关于iphone - 顺序 UIView 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com