CoreAnimation Ruang nama
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit.
Kelas
CAAction |
Antarmuka yang diimplementasikan oleh objek yang berpartisipasi dalam animasi yang dikoordinasikan oleh CALayer. |
CAAnimation |
Kelas dasar untuk animasi. |
CAAnimationDelegate |
Delegasikan kelas untuk kelas CAAnimation. |
CAAnimationDelegate_Extensions |
Metode ekstensi ke CAAnimationDelegate kelas . |
CAAnimationGroup |
Mengelompokkan dan mengatur beberapa animasi. |
CAAnimationStateEventArgs |
Menyediakan data untuk peristiwa E:CoreAnimation.CAAnimationStateEventArgs.AnimationStopped. |
CABasicAnimation |
Animasi berbasis keyframe tunggal. |
CAConstraint |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAConstraintLayoutManager |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAContentsFormatExtensions |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CADisplayLink |
Objek sinkronisasi antara animasi Anda dan refresh tampilan. |
CAEAGLLayer |
Lapisan yang digunakan untuk merender konten OpenGL. |
CAEmitterBehavior |
Mendefinisikan perilaku emiter sistem partikel. |
CAEmitterCell |
Sumber partikel yang dipancarkan oleh CAEmitterLayer instans. |
CAEmitterLayer |
Emiter sistem partikel. Jenis partikel didefinisikan oleh CAEmitterCell. |
CAFillMode |
Konstanta yang digunakan untuk properti FillMode di CAAnimation dan CALayer, digunakan untuk mengontrol perilaku objek setelah animasi selesai. |
CAGradientLayer |
Lapisan yang merender gradien di atas latar belakangnya. |
CAGradientLayerTypeExtensions |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAKeyFrameAnimation |
Dukungan animasi berbasis keyframe. |
CALayer |
Lapisan menyimpan gambar yang dirender ke dalam layar. |
CALayerDelegate |
Delegasikan kelas untuk CALayer. |
CALayerDelegate_Extensions |
Metode ekstensi ke ICALayerDelegate antarmuka untuk mendukung semua metode dari CALayerDelegate protokol. |
CAMediaTiming |
Menyediakan sistem pengaturan waktu hierarkis, dengan dukungan untuk pengulangan dan pengurutan. |
CAMediaTimingFunction |
Menentukan kecepatan animasi. |
CAMetalLayer |
CALayer yang dirender menggunakan fungsi Metal. |
CAOpenGLLayer |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAPropertyAnimation |
Animasi yang dapat menganimasikan properti objek. |
CARenderer |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CARendererOptions |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAReplicatorLayer |
Lapisan yang mereplikasi lapisan yang ada, dengan beberapa atribut (warna, transformasi) diubah. |
CAScrollExtensions |
Metode ekstensi untuk CAScroll. |
CAScrollLayer |
Lapisan yang digunakan untuk menunjukkan bagian dari lapisan lain. |
CAShapeLayer |
Menggambar kurva bezier dan menyusun hasilnya dengan sublayer pertamanya. |
CASpringAnimation |
Animasi musim semi dengan kekakuan, massa, dan kelembaban. |
CATextLayer |
Tata letak teks sederhana dan penyajian teks reguler atau atribut. |
CATextLayerAlignmentModeExtensions |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CATextLayerTruncationModeExtensions |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CATiledLayer |
Lapisan yang kontennya dapat disediakan secara asinkron, dan dengan beberapa tingkat detail. |
CATransaction |
Kerangka kerja untuk menyinkronkan beberapa operasi transformasi. |
CATransformLayer |
Lapisan komposit 3D. |
CATransition |
Transisi animasi untuk lapisan. |
CAValueFunction |
Kelas yang digunakan untuk menerapkan fungsi ke nilai properti selama animasi. |
Struct
CATransform3D |
Transformasi 3D. |
Antarmuka
ICAAction |
Antarmuka yang mewakili metode yang diperlukan (jika ada) dari protokol CAAction. |
ICAAnimationDelegate |
Delegasikan untuk merespons peristiwa siklus hidup animasi. |
ICALayerDelegate |
Antarmuka yang mewakili metode yang diperlukan (jika ada) dari protokol CALayerDelegate. |
ICAMediaTiming |
Antarmuka yang mewakili metode yang diperlukan (jika ada) dari protokol CAMediaTiming. |
ICAMetalDrawable |
Antarmuka yang mendefinisikan protokol untuk buffer tampilan pada lapisan logam. |
Enum
CAAutoresizingMask |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAConstraintAttribute |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAContentsFormat |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CACornerMask |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAEdgeAntialiasingMask |
Bendera yang digunakan untuk menentukan sisi lapisan apa yang harus diantisipasi. |
CAGradientLayerType |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CAScroll |
Menghitung arah gulir. |
CATextLayerAlignmentMode |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
CATextLayerTruncationMode |
Namespace CoreAnimation menyediakan akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit. |
Keterangan
CoreAnimation adalah inti dari UI iPhone. API di namespace ini memberi Anda akses ke kerangka kerja animasi yang mendasar yang mendukung UIKit.
Kontrol UIKit diimplementasikan di atas CoreAnimation yang antarmukanya langsung dengan OpenGL dan CoreGraphics untuk menyediakan penyajian yang dipercepat perangkat keras.
Masing-masing UIView didukung oleh yang CALayer diakses melalui Layer properti . Saat Anda menggambar dengan mengganti metode M:UIKit.UIView.Draw(System.Drawing.RectangleF), Anda menggambar ke lapisan CoreAnimation.
Sama seperti UIView dapat berisi UIView lainnya, CALayers dapat berisi instans CALayer lainnya. Anda dapat memasukkan lapisan anak ke dalam lapisan dengan memanggil AddSublayer(CALayer), M:CoreAnimation.CALayer.InsertSublayer(CoreAnimation.CALayer,int), InsertSublayerBelow(CALayer, CALayer), InsertSublayerAbove(CALayer, CALayer) atau hapus lapisan dengan menggunakan M:CoreAnimation.CALayer.RemoveFromSuperLayer(). Selain itu, ada berbagai jenis CALayer yang disediakan oleh sistem operasi dan Anda dapat membuat sendiri dengan subkelas salah satu lapisan yang disediakan sistem: CALayer, , , CAScrollLayerCATextLayerCATiledLayer, CAReplicatorLayer, CAShapeLayer, CAGradientLayer, , CATransformLayer, CAEAGLLayer dan .CAEmitterLayer
Lapisan akan mempertahankan konten yang Anda gambar ke dalamnya, tidak seperti toolkit lain tidak perlu menerapkan metode repaint untuk merespons peristiwa yang diekspos wilayah. Jika Anda ingin memperbarui konten lapisan, Anda harus memanggil metode M:CoreAnimation.CALayer.SetNeedsDisplay() yang akan memicu panggilan ke DrawInContext(CGContext) metode yang dapat Anda ambil alih.
Anda dapat menyesuaikan penyajian lapisan dengan mengatur Delegate properti lapisan Anda untuk menunjuk ke instans CALayerDelegate subkelas.
Anda dapat menerapkan transformasi 3D ke lapisan Anda dengan mengatur Transform properti dan Anda juga dapat mengontrol transformasi 3D yang diterapkan ke sublayer dengan mengatur SublayerTransform properti . Jika Anda menggunakan SublayerTransform, Anda juga dapat menggunakan ZPosition properti untuk memberinya posisi sumbu Z. Ini sangat membantu untuk melakukan rendering perspektif.
Lapisan menyediakan komponen akselerasi perangkat keras yang diperlukan agar CoreAnimation dapat melakukan pekerjaannya secara efisien. Selain fungsionalitas ini, CoreAnimation menyediakan sekumpulan API untuk menganimasikan lapisan.
Sebelum iOS 4, animasi ditentukan sebagai transaksi: pengembang aplikasi akan mengurungkan spesifikasi animasi mereka antara panggilan ke M:UIKit.UIView.BeginAnimations* dan M:UIKit.UIView.CommitAnimations*. Bereaksi terhadap peristiwa animasi (seperti kelanjutan setelah animasi selesai) memerlukan penggunaan objek delegasi dan pemilih kustom. Teknik ini masih tersedia, tetapi Apple merekomendasikan penggunaan animasi "berbasis blok" di aplikasi modern. Dalam terminologi C#, ini akan disebut animasi "berbasis delegasi", di mana delegasi (atau fungsi anonim) berjenis T:Foundation.NSAction. Selain itu, Xamarin.iOS menyediakan pembungkus asinkron untuk fungsi animasi yang umum digunakan, sehingga pengembang aplikasi dapat menggunakan fasilitas C# 5+ async-await
.
Contoh berikut menunjukkan berbagai teknik:
//Transaction-based (recommended only for iOS < 4)
UIView.BeginAnimations("transactional");
UIView.SetAnimationDuration(2.0);
imgView.Layer.Position = newPosition;
UIView.SetAnimationDelegate (this);
UIView.SetAnimationDidStopSelector (new Selector ("positionAnimationFinished:"));
UIView.CommitAnimations();
//...etc...
[Export("positionAnimationFinished:")]
void SlideStopped ()
{
Console.WriteLine("Animation finished; logic continues here");
}
Berbasis blok
//Block-based, with animations in lambda, continuation as delegate (either technique works in either position)
UIView.Animate(2.0, () => imgView.Layer.Position = newPosition, SlideStopped);
//...etc...
void SlideStopped() {
Console.WriteLine("Animation finished; logic continues here");
}
Asinkron
async void MyAnimateAsync {
await UIView.AnimateAsync(2.0, () => imgView.Layer.Position = newPosition);
Console.WriteLine("Animation finished; logic continues here");
}
Teknik berbasis UIKit ini harus memenuhi sebagian besar kasus penggunaan animasi (juga, Sprite Kit menyediakan animasi dan pemodelan fisika yang sesuai untuk kasus penggunaan frame-rate tinggi seperti game). Namun, selain teknik berbasis UIKit ini, pengembang aplikasi yang membuat teknik mereka sendiri CALayermemiliki akses ke teknik animasi tingkat bawah: Animasi Implisit dan Animasi Eksplisit.
N.B.: Animasi lapisan dinonaktifkan dalam UIViews kecuali di UIView blok animasi. (Lihat diskusi di bawah ini.)
Animasi Implisit terjadi ketika pengembang aplikasi mengubah satu atau beberapa properti dalam lapisan dan CoreAnimation akan menerapkan perubahan tersebut secara bertahap dengan menginterpolasi nilai dari nilai saat ini ke nilai baru selama periode waktu yang telah ditentukan (kecuali dikonfigurasi, animasi akan memakan waktu 0,25 detik untuk dieksekusi).
//
// The following method sets the opacity to zero on the image's Layer
// and will trigger a 0.25 animation to vanish the image by setting the
// opacity to zero
//
void HideImage (UIImageView image)
{
view.Layer.Opacity = 0;
}
Pengembang aplikasi yang menginginkan lebih banyak kontrol dapat menggunakan Animasi Eksplisit. Untuk melakukan ini, mereka membuat instans salah satu kelas CAPropertyAnimationanimasi , , CATransition, CAAnimationGroupCABasicAnimation atau CAKeyFrameAnimation. Animasi dilampirkan ke lapisan, dengan memanggil AddAnimation(CAAnimation, String) metode .
Tidak seperti animasi implisit yang terjadi sebagai reaksi terhadap perubahan properti lapisan, animasi eksplisit tidak mengubah properti objek Anda. Sebaliknya, mereka mengubah properti salinan grafik adegan Anda yang disimpan di PresentationLayer. Ini berarti bahwa setiap perubahan yang Anda buat pada objek sebagai bagian dari animasi eksplisit tidak permanen. Setelah animasi selesai, objek akan dirender dengan nilai yang masih ada dalam model.
//
// Notice that we set the final position for the layer before we start
// animating from 0 to 120 since this is an explicit animation and we
// do not want to see the object "jump" back to 0, 0 at the end of
// the animation
//
layer.Position = new PointF (0, 120);
var positionAnimation = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("position.y");
positionAnimation.Values = new NSNumber [] { 0, 30, 60, 120 };
layer.AddAnimation (positionAnimation, "myAnimation");
Animasi berbasis lapisan dinonaktifkan oleh UIViews kecuali dalam UIView blok animasi. Animasi berbasis lapisan dalam blok tersebut mengabaikan durasi blok dan beroperasi pada durasi yang ditentukan sendiri, baik default implisit 0,25 detik atau panjang eksplisit. Ini ditunjukkan dalam contoh berikut, di mana UIView durasi blok animasi adalah 1,0, tetapi pada aktualitasnya, animasi opasitas implisit berbasis lapisan berakhir dalam 0,25 detik dan eksekusi penempatan ulang selama 10 detik.
UIView.AnimateAsync(1.0, () => {
imgView.Layer.Opacity = 0.0f;
var theAnim = CABasicAnimation.FromKeyPath("position");
theAnim.From = NSObject.FromObject(firstPosition);
theAnim.To = NSObject.FromObject(secondPosition);
theAnim.Duration = 10.0;
imgView.Layer.AddAnimation(theAnim, "AnimateFrame");
});