gpt4 book ai didi

ios - 如何在 Z 轴上平移和动画 CALayer?

转载 作者:行者123 更新时间:2023-12-01 16:15:49 29 4
gpt4 key购买 nike

我正在尝试在 Z 轴中翻译 CALayer,以让用户感觉物体靠近屏幕。但我无法让它工作。这是我的代码:

func createCircle(size : CGFloat, color : UIColor) {
let layer = CALayer();
let parentLayer = self.visualView.layer;

// layer testing properties
layer.backgroundColor = color.CGColor;
layer.cornerRadius = size / 2.0;
layer.borderWidth = 2.0;
layer.frame = CGRectMake(CGFloat(arc4random() % uint(parentLayer.frame.width)), CGFloat(arc4random() % uint(parentLayer.frame.height)), size, size);


// transform properties
let identity = CATransform3DIdentity;

// have tried both -50 and +50 for the Z-Axis and got nothing.
layer.transform = CATransform3DTranslate(identity, 0, 0, 50);

// animation
let animationGroup = self.createAnimationForLayer(layer);

layer.addAnimation(animationGroup, forKey: nil);
parentLayer.addSublayer(layer);
}

func createAnimationForLayer(layer : CALayer) -> CAAnimationGroup {
let transformChange = CABasicAnimation(keyPath: "transform");
transformChange.fromValue = NSValue(CATransform3D: layer.transform);
transformChange.toValue = NSValue(CATransform3D: CATransform3DIdentity);

let animationGroup = CAAnimationGroup();
animationGroup.animations = [transformChange];
animationGroup.duration = 1.0;
animationGroup.delegate = self;
animationGroup.setValue(layer, forKey: "animationLayer");
animationGroup.fillMode = kCAFillModeForwards;
return animationGroup;
}

翻译根本没有发生。物体不动。我想问题可能出在翻译本身,但如果我给 X 或 Y 赋值,对象就会移动。我不能在 CALayer 中使用 Z 轴吗?

最佳答案

  • 添加透视投影:m34 = -1.0/d,其中 d 是假想相机和屏幕之间的距离。
  • 设置 sublayerTransform 以将透视图应用于其所有子图层
    var transform = CATransform3DIdentity
    transform.m34 = -1.0/500.0
    self.visualView.layer.transform = transform
    self.visualView.layer.sublayerTransform = transform
  • 关于ios - 如何在 Z 轴上平移和动画 CALayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746869/

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