【问题标题】:How To Implement A Circular Loader without SKShapeNode如何在没有 SKShapeNode 的情况下实现循环加载器
【发布时间】:2015-05-14 21:13:48
【问题描述】:

我想创建一个简单的圆形加载器动画圈并围绕它消失

我找到了很棒的框架,但是它们使用 SKShapeNode,而 SKShapeNode 的性能对于实际部署的应用来说很糟糕

ProgressNode: Very cool framework

【问题讨论】:

  • 这可能不是最好的解决方案,但您可以轻松地为一组纹理设置动画。或者,如果您正在寻找更动态的东西,您可以使用带有 SKActions 的裁剪节点(尽管裁剪节点也可能很昂贵)来产生类似的效果。请记住,虽然 SKShapeNode 性能很差,但如果您只为 UI 使用循环加载器,那么性能应该不是问题。只有当你需要在游戏中使用它时,你才可能决定不使用它。
  • 不幸的是我需要它来玩游戏,但圆圈颜色和边框是动态的
  • 一种方法可能是将 CCProgressTimer 从 cocos2D 转换为 Metal/SpriteKit。它使用四个三角形正方形的渐进显示来“掩盖”纹理。这是一个非常优雅和高性能的解决方案:fancyratstudios.com/2010/02/programming/…
  • @grape1 描述糟糕的表现?我在游戏中使用 SKShapeNodes 作为加载器,性能很好。这里很少有平局,并没有真正改变任何东西。你在屏幕上同时使用多少个加载器?
  • 众所周知,SKShapeNode 存在性能问题。如果您不确定,请在 Google 上搜索“skshapenode 性能”。至于对性能的需求,尽管这被称为“加载器”,但想象一下将它用于许多其他事情,其中​​许多同时用于视觉效果、仪器和其他所需的圆形动画用途。

标签: swift sprite-kit skshapenode


【解决方案1】:

您可以在 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,设置你想要旋转的图像,设置出口和约束,看看会发生什么。

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

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

【讨论】:

  • CAShapeLayer 与 SKShapeNode 完全相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
相关资源
最近更新 更多