Bagikan melalui


CoreAnimation Ruang nama

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");
});