Как реализовать циклический загрузчик без SKShapeNode

Я хочу создать простой круговой круг анимации загрузчика и рамку вокруг него, которая исчезает

Я нашел отличные фреймворки, но они используют SKShapeNode, а производительность SKShapeNode ужасна для реального развернутого приложения.

ProgressNode: очень классный фреймворк


person grape1    schedule 14.05.2015    source источник
comment
Возможно, это не лучшее решение, но вы можете легко анимировать массив текстур. Или, если вы ищете что-то более динамичное, вы можете использовать узел обрезки (хотя узлы обрезки также могут быть дорогими) с SKActions для получения аналогичного эффекта. Имейте в виду, что хотя производительность SKShapeNode плохая, если вы используете циклический загрузчик только для своего пользовательского интерфейса, производительность не должна быть проблемой. Только если вам нужно использовать его в игре, вы можете отказаться от его использования.   -  person Epic Byte    schedule 15.05.2015
comment
к сожалению, мне это нужно для игры, но цвет и граница круга динамические   -  person grape1    schedule 15.05.2015
comment
Одним из способов сделать это может быть преобразование CCProgressTimer из cocos2D в Metal/SpriteKit. Он использует прогрессивное раскрытие квадрата из четырех треугольников, чтобы замаскировать текстуру. Это очень элегантное и эффективное решение: fancyratstudios.com/2010/02/programming. /   -  person Confused    schedule 29.09.2016
comment
@grape1 Описать ужасное выступление? Я использую SKShapeNodes для загрузчиков в своей игре, и производительность в порядке. Несколько розыгрышей здесь и там ничего особо не меняют. Сколько загрузчиков вы используете на экране одновременно?   -  person Whirlwind    schedule 01.10.2016
comment
хорошо известно, что SKShapeNode имеет проблемы с производительностью. Поищите в Google производительность skshapenode, если вы не уверены в этом. Что касается потребности в производительности, несмотря на то, что это называется загрузчиком, представьте, что вы используете его для многих других вещей, многие из которых в то же время для визуальных эффектов, инструментов и другого желаемого использования круговой анимации.   -  person Confused    schedule 01.10.2016
comment
Есть ли конкретная причина, по которой вы не используете UIImageView и позволяете ему вращаться с помощью CABasicAnimation?   -  person mbachm    schedule 02.10.2016
comment
Если загрузчик всегда сверху, вы можете использовать CAShapeLayer вместо SKShapeNode.   -  person suyama    schedule 03.10.2016


Ответы (1)


Вы можете использовать UIView в UIImageView с «кругом загрузки» в качестве изображения и просто повернуть его. Вот пример класса:

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 может. Там показывают, как сделать круговой индикатор с помощью CAShapeLayer.

person mbachm    schedule 03.10.2016
comment
CAShapeLayer точно такой же, как SKShapeNode. - person Confused; 05.10.2016