Pertanyaan Bekerja dengan CAReplicatorLayer


Saya sudah mencoba membuat efek teks keren dengan CAReplicatorlayer, CATextLayer, dan animasi yang sangat dasar. Saya mencoba untuk membuat huruf tampak seperti sedang dikeluarkan dari bagian atas layar diikuti oleh replikator keren yang akan menjadi kurang dan kurang terlihat. Saya sudah berhasil melakukan efek ini tetapi tidak sepenuhnya.

Sejauh ini yang saya punya:

CATextLayer *messageLayer = [CATextLayer layer];

[messageLayer setForegroundColor:[[UIColor blackColor] CGColor]];
[messageLayer setContentsScale:[[UIScreen mainScreen] scale]];
[messageLayer setFrame:CGRectMake(0, 0, 40, 40)];
[messageLayer setString:@"A"];


CAReplicatorLayer *replicatorX = [CAReplicatorLayer layer];

//Set the replicator's attributes
replicatorX.frame = CGRectMake(0, 0, 40, 40);
replicatorX.anchorPoint = CGPointMake(0,0);
replicatorX.position = CGPointMake(0, 0);
replicatorX.instanceCount = 9;
replicatorX.instanceDelay = 0.15;
replicatorX.instanceAlphaOffset = -0.1;

replicatorX.zPosition = 200;
replicatorX.anchorPointZ = -160;

[replicatorX addSublayer:messageLayer];

[self.view.layer addSublayer:replicatorX];


messageLayer.position = CGPointMake(40, 400);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
animation.fromValue = [NSNumber numberWithInt:0];;
animation.toValue = [NSNumber numberWithInt:400];
animation.duration = 3;
[messageLayer addAnimation:animation forKey:@"s"];

Saya punya dua masalah:

  1. Lapisan direplikasi mulai di titik Akhir.
  2. Ketika lapisan utama mencapai titik animasi terakhirnya, animasi berhenti dan lapisan yang direplikasi tidak dapat menyelesaikan animasinya.

9
2017-09-28 12:07


asal


Jawaban:


Menetapkan nilai yang benar untuk fillMode objek animasi dan properti RemoveOnCompletion mudah-mudahan akan menyelesaikan masalah Anda:

"Lapisan direplikasi mulai di titik Akhir."

Ini disebabkan oleh nilai yang ditetapkan untuk instanceDelay properti, yang menunda animasi dengan 0,15 dalam contoh Anda. Untuk menyajikan animasi dari fromValue, Anda perlu memperhitungkan penundaan ini dengan menyetel fillMode animasi ke kCAFillModeBackwards.

animation.fillMode = kCAFillModeBackwards;

"Ketika lapisan utama mencapai titik animasi terakhirnya, animasi berhenti   dan lapisan yang direplikasi tidak dapat menyelesaikan animasi mereka. "

Ini terjadi karena secara default "animasi dihapus dari animasi layer target setelah selesai."1. Anda dapat mengganti perilaku default ini dengan menyetel atribut animasi dihapusPersiapanOn ke NO.

animation.removedOnCompletion = NO;

Semoga ini membantu. :)


5
2017-10-05 23:30