Rive: τι είναι, εργαλείο animation για Flutter και iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-01 Χρόνος ανάγνωσης: 11 λεπ

Rive — ένα εργαλείο για δημιουργία και αναπαραγωγή διαδραστικού διανυσματικού animation που συνδυάζει τον επεξεργαστή animation και βιβλιοθήκες χρόνου εκτέλεσης για φορητές πλατφόρμες. Σε αντίθεση με τα παθητικά φορμά, το Rive υποστηρίζει State Machine — λογική μεταβάσεων μεταξύ animations ανάλογα με τις ενέργειες του χρήστη. Σύμφωνα με το Rive Blog (2026), το εργαλείο χρησιμοποιείται σε περισσότερα από 10.000 έργα, συμπεριλαμβανομένων των Duolingo και Bumble. Διαβάστε περισσότερα για άλλους τύπους animation στον γενικό οδηγό animation.

Κύρια σημεία

  • Rive — εργαλείο για διαδραστικό διανυσματικό animation με δικό του επεξεργαστή.
  • State Machine — οπτική λογική μεταβάσεων μεταξύ animations μέσω ενεργοποιητών.
  • RiveRuntime — βιβλιοθήκη αναπαραγωγής για iOS, Android, Flutter και Web.
  • RiveAnimation — Dart widget για Flutter για ενσωμάτωση αρχείων .riv στην εφαρμογή.
  • Μορφή .riv — δυαδικό δοχείο που περιέχει animation και State Machine.

Τι είναι το Rive;

Rive (πρώην Rive.app, ιδρύθηκε το 2016) — είναι ένας επεξεργαστής γραφικών και περιβάλλον εκτέλεσης cross-platform για διαδραστικό διανυσματικό animation. Σε αντίθεση με το After Effects + Bodymovin (Lottie), το Rive παρέχει ένα ενοποιημένο περιβάλλον: ο σχεδιαστής σχεδιάζει, δημιουργεί animation και διαμορφώνει τη λογική μεταβάσεων απευθείας στον επεξεργαστή. Το αποτέλεσμα εξάγεται σε ένα δυαδικό αρχείο .riv βάρους 2 έως 50 KB ανάλογα με την πολυπλοκότητα.

Η κύρια διαφορά του Rive από άλλες λύσεις — State Machine. Είναι ένα οπτικό γράφημα όπου οι κόμβοι είναι animations (Idle, Hover, Press, Active) και οι μεταβάσεις μεταξύ τους ενεργοποιούνται από triggers (Touch, Drag, Boolean). Ο προγραμματιστής στον κώδικα απλώς στέλνει triggers, και το RiveRuntime αποφασίζει μόνο του ποιο animation θα αναπαράγει και πώς θα κάνει ομαλή μετάβαση μεταξύ τους. Σύμφωνα με το Rive Engineering (2026), ένα μέσο .riv animation με State Machine καταλαμβάνει 15 KB — 5–10 φορές λιγότερο από ένα ισοδύναμο αρχείο βίντεο.

Rive Runtime είναι διαθέσιμο για Flutter, iOS (Swift), Android (Kotlin/Java), Web (WASM) και React. Η απόδοση γίνεται μέσω Skia (Flutter/Web), Core Graphics (iOS) ή Canvas (Android). Το Rive υποστηρίζει animation σχημάτων (Knob, Slider, Button με προσαρμοσμένη γεωμετρία), επιτρέποντας τη δημιουργία πλήρως κινούμενων στοιχείων UI, όχι μόνο διακοσμητικών animations.

Rive vs Lottie: σύγκριση προσεγγίσεων

Rive και Lottie λύνουν διαφορετικά προβλήματα. Το Lottie είναι ένας player για έτοιμα animations από το After Effects, βέλτιστος για παθητικά διακοσμητικά εφέ. Το Rive είναι ένα εργαλείο για δημιουργία διαδραστικών animations με δική του λογική, όπου το animation αντιδρά στις ενέργειες του χρήστη. Η επιλογή εξαρτάται από τον απαιτούμενο βαθμό διαδραστικότητας.

ΚριτήριοRiveLottie
ΕπεξεργαστήςΔικός του (Rive Editor)Adobe After Effects + Bodymovin
ΔιαδραστικότηταState Machine, triggers, Boolean, NumberΜόνο play/pause/seek
Μορφή.riv (δυαδική).json ή .lottie (protobuf)
ΑπόδοσηSkia / Core Graphics / CanvasCanvas / Core Animation / Skia
Κινούμενο UIKnob, Slider, Button, Input (ενσωματωμένα)Όχι (μόνο διακοσμητικά στρώματα)

Πότε να επιλέξετε Rive: διαδραστικά κουμπιά με απόκριση στο κλικ, στοιχεία παιχνιδιών (χαρακτήρες με καταστάσεις), διακόπτες με animation, δυναμικά εικονίδια που αντιδρούν στην κατάσταση. Πότε να επιλέξετε Lottie: προφορτωτές, likes, οθόνες υποδοχής, τονισμένα animations χωρίς λογική. Για έργα σε Flutter, το Rive είναι η προτιμώμενη επιλογή χάρη στην εγγενή ενσωμάτωση με Skia και τη γραμμή απόδοσης Flutter.

Ενσωμάτωση Rive σε Flutter (Dart)

Στο Flutter RiveAnimation — το κύριο widget για ενσωμάτωση αρχείων .riv. Είναι διαθέσιμο μέσω του πακέτου rive (επίσημο). Το RiveAnimation υποστηρίζει ορίσματα: artboard (επιλογή πίνακα), animation (όνομα animation), fit, alignment, controllers (για State Machine). Για διαδραστικές σκηνές χρησιμοποιείται το StateMachineController.

dart
import 'package:rive/rive.dart';

// Απλή αναπαραγωγή animation
RiveAnimation.asset(
  'assets/animations/button.riv',
  artboard: 'Button',
  animations: const ['idle'],
  fit: BoxFit.contain,
)

// StateMachineController με triggers
class InteractiveButton extends StatefulWidget {
  @override
  State<InteractiveButton> createState() => _InteractiveButtonState();
}

class _InteractiveButtonState extends State<InteractiveButton> {
  StateMachineController? _controller;
  SMIInput<bool>? _isPressed;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTapDown: (_) => _isPressed?.value = true,
      onTapUp: (_) => _isPressed?.value = false,
      child: RiveAnimation.asset(
        'assets/animations/button.riv',
        fit: BoxFit.contain,
        onInit: (artboard) {
          _controller = StateMachineController.fromArtboard(
            artboard, 'State Machine 1',
          );
          if (_controller != null) {
            artboard.addController(_controller!);
            _isPressed = _controller!.findInput<bool>('isPressed');
          }
        },
      ),
    );
  }
}

Βέλτιστες πρακτικές Flutter: φορτώστε αρχεία .riv ασύγχρονα μέσω RiveAnimation.asset (ενσωματωμένο AssetBundle). Για ListView χρησιμοποιήστε ένα StateMachineController που μοιράζεται μεταξύ στοιχείων. Το Rive δεν απαιτεί πλέον ξεχωριστή εισαγωγή — το rive v0.12+ περιλαμβάνει όλες τις λειτουργίες. Για προσαρμοσμένο animation ελέγξτε απευθείας το RiveAnimationController — παρέχει πρόσβαση σε animations, ανάμειξη (blend) και ταχύτητα.

Ενσωμάτωση Rive σε iOS (Swift)

Στο iOS RiveRuntime αντιπροσωπεύεται από την κλάση RiveView (UIKit) και RiveViewModel (SwiftUI). Η βιβλιοθήκη συνδέεται μέσω Swift Package Manager. Το RiveView αποδίδει αρχεία .riv μέσω Core Graphics και Metal, υποστηρίζοντας 120 FPS σε οθόνες ProMotion. Για State Machine χρησιμοποιείται το RiveStateMachineLayer με σύνδεση σε triggers.

swift
import RiveRuntime

// SwiftUI: RiveViewModel με animation
struct RiveAnimationView: View {
    @State private var isPressed = false

    var body: some View {
        RiveViewModel(fileName: "button").view()
            .frame(width: 200, height: 60)
            .gesture(
                DragGesture(minimumDistance: 0)
                    .onChanged { _ in
                        if !isPressed {
                            isPressed = true
                            // Trigger μέσω State Machine
                        }
                    }
                    .onEnded { _ in
                        isPressed = false
                    }
            )
    }
}

// UIKit: RiveView με χειροκίνητο έλεγχο
let riveView = RiveView()
riveView.configure(fileName: "loading", extension: "riv")
riveView.fit = .contain
riveView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(riveView)

// Διαχείριση State Machine
riveView.triggerInput(named: "startAnimation")

Βέλτιστες πρακτικές iOS: χρησιμοποιήστε RiveViewModel για SwiftUI — διαχειρίζεται αυτόματα τον κύκλο ζωής. Για UIKit εγγραφείτε στο RiveViewDelegate για παρακολούθηση συμβάντων. Το Rive καταναλώνει λιγότερη CPU από το Lottie στο iOS χάρη στην απόδοση μέσω Core Graphics. Για animations σε NavigationView/UICollectionView χρησιμοποιήστε προφόρτωση μέσω RiveFile.preload().

Ενσωμάτωση Rive σε Android (Kotlin)

Στο Android RiveAnimationView — το κύριο View για ενσωμάτωση αρχείων .riv. Η βιβλιοθήκη app.rive:rive-android συνδέεται μέσω Gradle. Το RiveAnimationView κληρονομεί από το View και αποδίδει μέσω Canvas με υποστήριξη Hardware Acceleration. Το State Machine διαχειρίζεται μέσω setTriggers και setInputs.

kotlin
// build.gradle.kts
implementation("app.rive:rive-android:0.9.0")

// XML layout
<app.rive.RiveAnimationView
    android:id="@+id/riveView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:rive_file="@raw/mascot"
    app:rive_artboard="Mascot"
    app:rive_animation="idle" />

// Kotlin: διαχείριση State Machine
import app.rive.riveandroid.RiveAnimationView
import app.rive.riveandroid.StateMachineInput

val riveView = findViewById<RiveAnimationView>(R.id.riveView)
riveView.post {
    riveView.setTriggers("hover") "> Αποστολή trigger στο State Machine
    riveView.setInput("speed", 1.5f)
    riveView.setInput("isActive", true)
    riveView.play()
}

// Χειρισμός ολοκλήρωσης animation
riveView.addListener(object : RiveAnimationView.RiveListener() {
    override fun onAnimationCompleted(animationName: String) {
        Log.d("Rive", "Animation $animationName completed")
    }
})

Βέλτιστες πρακτικές Android: φορτώστε αρχεία .riv μέσω res/raw (ενσωματωμένοι πόροι) ή assets (φόρτωση μέσω δικτύου). Το RiveAnimationView διαχειρίζεται αυτόματα τον κύκλο ζωής — μην καλείτε χειροκίνητα play/pause σε onResume/onPause. Για animations σε RecyclerView χρησιμοποιήστε setOnScrollListener για παύση αναπαραγωγής κατά την κύλιση. Σύμφωνα με την τεκμηρίωση Rive (2026), αρχεία .riv έως 100 KB αναλύονται σε 5–10 ms σε συσκευές μεσαίας κατηγορίας.

State Machine: λογική μεταβάσεων στο Rive

State Machine — η βασική δυνατότητα του Rive που το ξεχωρίζει από τα παθητικά φορμά animation. Είναι ένα οπτικό γράφημα όπου οι κορυφές είναι καταστάσεις (animations) και οι ακμές είναι μεταβάσεις που ενεργοποιούνται από triggers. Το State Machine δημιουργείται στο Rive Editor: ο σχεδιαστής προσθέτει κόμβους animations, τους συνδέει με γραμμές και ορίζει triggers (Touch, Boolean, Number). Ο προγραμματιστής πρέπει απλώς να στείλει αυτά τα triggers από τον κώδικα.

dart
// Flutter: πλήρης έλεγχος πάνω από το State Machine
import 'package:rive/rive.dart';

class RiveStateMachineWidget extends StatefulWidget {
  @override
  State<RiveStateMachineWidget> createState() => _RiveStateMachineWidgetState();
}

class _RiveStateMachineWidgetState extends State<RiveStateMachineWidget> {
  Artboard? _artboard;
  StateMachineController? _controller;
  SMIInput<bool>? _isHovered;
  SMIInput<double>? _progress;

  @override
  Widget build(BuildContext context) {
    return MouseRegion(
      onEnter: (_) => _isHovered?.value = true,
      onExit: (_) => _isHovered?.value = false,
      child: RiveAnimation.asset(
        'assets/interactive_icon.riv',
        onInit: (artboard) {
          _controller = StateMachineController.fromArtboard(
            artboard, 'State Machine 1',
          );
          artboard.addController(_controller!);
          _isHovered = _controller!.findInput<bool>('isHovered');
          _progress = _controller!.findInput<double>('progress');
        },
      ),
    );
  }
}

// Αποστολή αριθμητικής τιμής
SMIInput<double> speedInput = controller.findInput('speed');
speedInput?.value = scrollPosition;

Τύποι triggers: Boolean — διακόπτης (true/false), Number — αριθμητική τιμή (0.0–1.0 ή αυθαίρετο εύρος), Trigger — εφάπαξ παλμός (πάτημα κουμπιού). Στο Rive Editor μπορείτε να διαμορφώσετε την εξομάλυνση μεταβάσεων (Transition Duration) — συνιστώμενη τιμή 100–300 ms για ομαλότητα. Για σύνθετες καταστάσεις UI χρησιμοποιήστε ένθετες State Machine (Nested State Machines) — κάθε τμήμα του animation διαχειρίζεται ανεξάρτητα. Το Rive State Machine λειτουργεί σε όλες τις πλατφόρμες χωρίς αλλαγές στο αρχείο .riv — η λογική μεταβάσεων είναι ενσωματωμένη στο αρχείο, όχι στον κώδικα της εφαρμογής.

Συχνές ερωτήσεις

Σε τι διαφέρει το Rive από το Lottie;

Rive — διαδραστικό animation με State Machine, triggers και δικό του επεξεργαστή. Lottie — παθητική αναπαραγωγή JSON animation από το After Effects. Το Rive είναι κατάλληλο για κουμπιά, παιχνίδια και στοιχεία UI με απόκριση χρήστη. Lottie — για διακοσμητικά εφέ (προφορτωτές, likes). Το Rive χρησιμοποιεί μορφή .riv, το Lottie — JSON ή .lottie.

Μπορεί να χρησιμοποιηθεί το Rive χωρίς State Machine;

Ναι. Το Rive υποστηρίζει απλή αναπαραγωγή animation χωρίς State Machine — καθορίστε animationName στο RiveAnimation.asset ή RiveView. Σε αυτή την περίπτωση το Rive λειτουργεί σαν Lottie: επαναλαμβανόμενο ή εφάπαξ animation. Το State Machine είναι ένα προαιρετικό στρώμα για διαδραστικότητα. Για έργα που χρειάζονται μόνο διακοσμητικό animation, το State Machine είναι περιττό.

Είναι το Rive συμβατό με Android Jetpack Compose;

Ναι, μέσω AndroidView για ενσωμάτωση του RiveAnimationView στο Compose. Από το rive-android 0.9.0, είναι διαθέσιμο το περίβλημα Compose RiveAnimation compose() με υποστήριξη τροποποιητών. Για διαχείριση State Machine χρησιμοποιήστε remember { StateMachineHolder() }. Το Rive υποστηρίζει επίσης Compose Multiplatform σε iOS μέσω κοινού χρόνου εκτέλεσης Compose.

Λειτουργεί το Rive σε Flutter Web;

Ναι, το Rive υποστηρίζει Flutter Web μέσω Skia Wasm (CanvasKit) ή HTML renderer. Το CanvasKit συνιστάται για μέγιστη απόδοση. Τα αρχεία Rive φορτώνονται μέσω HTTP αιτήματος (RiveAnimation.network) ή συσκευάζονται σε assets. Το Flutter Web με Rive λειτουργεί σωστά σε όλα τα σύγχρονα προγράμματα περιήγησης (Chrome 90+, Safari 15+, Firefox 90+).

Πώς να βελτιστοποιήσετε την απόδοση του Rive σε κινητές συσκευές;

Περιορίστε τον αριθμό ταυτόχρονα ενεργών στρωμάτων σε 20–30. Χρησιμοποιήστε Flat shading αντί για Gradient για απλά σχήματα. Για animations με κείμενο χρησιμοποιήστε System Text (όχι διανυσματικό κείμενο στο Rive Editor). Ελαχιστοποιήστε τον αριθμό Bone animations για χαρακτήρες — για στοιχεία UI δεν χρειάζονται. Σε παλαιότερες συσκευές απενεργοποιήστε τη διπλή προσωρινή αποθήκευση με riveView.enableDoubleBuffering = false στο Android.

Περίληψη

  • Rive — διαδραστικό διανυσματικό animation με δικό του επεξεργαστή και περιβάλλον εκτέλεσης για 5+ πλατφόρμες.
  • State Machine — ενσωματωμένη λογική μεταβάσεων μεταξύ animations μέσω triggers (Touch, Boolean, Number).
  • RiveRuntime — βιβλιοθήκες για Flutter, iOS, Android, Web και React με απόδοση μέσω Skia/Core Graphics.
  • Μορφή .riv — δυαδικό δοχείο 2–50 KB που περιέχει animation και State Machine.
  • RiveAnimation (Flutter), RiveViewModel (SwiftUI), RiveAnimationView (Android) — κύρια στοιχεία.
  • Το Rive είναι κατάλληλο για διαδραστικά στοιχεία UI, το Lottie για παθητικά διακοσμητικά animations.
  • Τύποι triggers: Boolean (διακόπτης), Number (αριθμός), Trigger (παλμός). Συνιστώμενη διάρκεια μετάβασης — 100–300 ms.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης