Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在没有SKShapeNode的情况下实现循环加载程序_Swift_Sprite Kit_Skshapenode - Fatal编程技术网

Swift 如何在没有SKShapeNode的情况下实现循环加载程序

Swift 如何在没有SKShapeNode的情况下实现循环加载程序,swift,sprite-kit,skshapenode,Swift,Sprite Kit,Skshapenode,我想创造一个简单的循环加载动画圈和周围的边界,这是消失 我发现了很棒的框架,但它们使用的是SKShapeNode,对于实际部署的应用程序来说,SKShapeNode的性能非常糟糕 您可以在UIImageView中使用UIView,并将“加载圆”作为图像,然后旋转它。下面是一个示例类: import UIKit class CircularLoadingView: UIView { @IBOutlet weak var rotatingImage: UIImageView! l

我想创造一个简单的循环加载动画圈和周围的边界,这是消失

我发现了很棒的框架,但它们使用的是SKShapeNode,对于实际部署的应用程序来说,SKShapeNode的性能非常糟糕


您可以在UIImageView中使用UIView,并将“加载圆”作为图像,然后旋转它。下面是一个示例类:

import UIKit

class CircularLoadingView: UIView {

    @IBOutlet weak var rotatingImage: UIImageView!
    let duration: Double = 1

    func startAnimation() {
        let animation = CABasicAnimation(keyPath: "transform.rotation.z")
        animation.toValue = NSNumber(floatLiteral:  M_PI * 2.0 * duration)
        animation.duration = duration
        animation.isCumulative = true
        animation.repeatCount = Float(CGFloat.greatestFiniteMagnitude)
        rotatingImage.layer.add(animation, forKey: "animationKey")

        UIView.animate(withDuration: duration, animations: {
            self.alpha = 1
        })
    }
}
只需添加UIView并将CircularLoadingView设置为自定义类。添加UIImageView,设置要旋转的图像,设置出口和约束,然后查看发生了什么

但是,通过这种尝试,你需要一个图像,你必须创建或找到它


如果这对你没有帮助,也许这个老家伙可以。在那里,他们展示了如何使用CAShapeLayer制作圆形指示器。

这可能不是最好的解决方案,但您可以轻松地设置纹理阵列的动画。或者,如果您正在寻找更具动态性的对象,可以将裁剪节点(尽管裁剪节点也可能很昂贵)与SKActions一起使用,以产生类似的效果。请记住,虽然SKShapeNode的性能很差,但如果您只在UI中使用循环加载程序,那么性能不应该是一个问题。只有当你需要在游戏中使用它时,你才可能决定不使用它。不幸的是,我在游戏中需要它,但圆的颜色和边框是动态的。实现这一点的方法可能是将CCProgressTimer从CoCoCoS2D转换为Metal/SpriteKit。它使用四个三角形正方形的渐进显示来“遮罩”纹理。这是一个非常优雅和高效的解决方案:@grape1描述糟糕的性能?我在游戏中使用SKShapeNodes作为装载机,性能很好。这里很少有平局,那里也没有什么改变。您同时在屏幕上使用多少加载程序?众所周知,SKShapeNode存在性能问题。如果您对此不确定,请在谷歌上搜索“skshapenode性能”。至于对性能的需求,尽管这被称为“加载器”,想象一下将其用于许多其他事情,其中许多同时用于视觉效果、仪器和其他所需的循环动画使用。CAShapeLayer与SKShapeNode完全相同。