2010-02-19 19 views
5

Sanırım iPhone geliştirme deneyimimin bir buçuk yılı boyunca bunu yanlış yapıyorum ... Biraz bilgili açıklama kullanabilirim lütfen!Animasyonun ayarlanmasıDidStopSelector: UIView'in animasyon temsilcisi

Bildiğiniz veya bilmediğiniz gibi, UIView özellikleri beginAnimations:forContext: yöntemini kullanarak kolayca animasyonlu olabilir ve bir commitAnimations çağrısı ile sarın. Animasyonun belli kısımları ortaya çıktığında

Ayrıca bitirme gibi başlangıç ​​olarak, eylemleri gerçekleştirmek için bir animasyon temsilci ayarlayabilirsiniz vb

Ben uzun zamandır ve asla benim kodunda animasyonları UIView kullanıyorum Herhangi bir ciddi sorun var, ancak kaçırdığım bir dokümana rastladım.

herhangi seçici biçimde olmalıdır bu yönteme geçirilen UIView en setAnimationDidStopSelector: devletler için belgeleri:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context; 

Ben hiç öyle yapmıyordum. Hiçbir parametre almayan eski doThis ve doThat tipi seçiciler ayarlıyorum.

Kabul ettiğim şey bu mu? Tüm kodları belgeli formu kullanmak için yeniden yazmalı mıyım? Ya da animasyonu durdurulandan önce tamamlanmış mı, yoksa konteksteki belirli bir veriyi yönteme iletmek için gerekli olup olmadığını bilmem gerekiyorsa bu kolaylık mı?

cevap

9

Bu kabul edilebilir.

load r0  <- obj 
load r1  <- @selector(method:and:also:asWellAs:) 
load r2  <- arg0 
load r3  <- arg1 
load [sp, 0] <- arg2 
load [sp, 4] <- arg3 
call   objc_msgSend 
store r0  -> something 

objc_msgSend tüm kayıtlarını tutacak burada:

id something = [obj method:arg0 and:arg1 also:arg2 asWellAs:arg3]; 

(değil gerçek ARM kodu) gibi görünecek bir Objective-C yöntemini çağırarak montaj seviyede


, -method:and:also:asWellAs:'u bulun ve ona atlayın. -method:… içinde derleyici, geri kayıtlar parametreleri ilişkilendirir yani

Şimdi yöntem yalnızca -doThis veya -doThat ise ne olur
store r0  -> self 
store r1  -> _cmd 
store r2  -> param0 
store r3  -> param1 
store [sp, ?] -> param2 
store [sp, ?+4] -> param3 
// rest of execution 

?

store r0  -> self 
store r1  -> _cmd 
// rest of execution 

Kayıtlar r2, r3 ve yığın değerleri geçersiz kılmak için hiçbir parametre olmayacaktır. Diğer bir deyişle, derleyici/çalışma zamanı ek parametrelerini göz ardı eder.

Çok fazla parametre aldığınızda sorunlar ortaya çıkacaktır.

+0

Mükemmel, açıklama için teşekkürler. – Jasarien

İlgili konular