2012-02-07 5 views
6

Yani (Ana) Animasyon başında atlar sorguları. Benim benim kırmızı kare (basit bir kullanıcı arayüzü görünüm) gelip nasılKatman Konum I 7.</p> <p>Şimdiye kadar, ama bir çift Aşağıdaki kod var olan Windows Phone gibi bir kiremit saygısız bir etki oluşturmak için çalışıyorum,

CALayer *layer = self.theRedSquare.layer; 
CATransform3D initialTransform = self.theRedSquare.layer.transform; 
initialTransform.m34 = 1.0/-1000; 

[UIView beginAnimations:@"Scale" context:nil]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; 
layer.transform = initialTransform; 
layer.anchorPoint = CGPointMake(-0.3, 0.5); 

CATransform3D rotationAndPerspectiveTransform = self.theRedSquare.layer.transform; 

rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, M_PI , 0 , -self.theRedSquare.bounds.size.height/2, 0); 

layer.transform = rotationAndPerspectiveTransform; 

[UIView setAnimationDelegate:self]; 
[UIView commitAnimations]; 

1. animasyonun başlangıcında sağa çevirir?

2. Bağlantı noktası için ana görünümde bir konum ayarlamak mümkün müdür? Şu anda mevcut görünüme göre keyfi olarak ayarlıyorum.

Herhangi bir işaretçi için şimdiden teşekkür ederiz. Canlandırma sırasında animasyon

Before

önce

(kare sağ kaymıştır fark)

During

animasyon sonra (kare fark sağ kaymıştır)

After

Video eklendi: example video

cevap

6
-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view 
{ 
    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y); 
    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y); 

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform); 
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform); 

    CGPoint position = view.layer.position; 

    position.x -= oldPoint.x; 
    position.x += newPoint.x; 

    position.y -= oldPoint.y; 
    position.y += newPoint.y; 

    view.layer.position = position; 
    view.layer.anchorPoint = anchorPoint; 
} 

-(void)animateView:(UIView *)theRedSquare 
{ 
    CALayer *layer = theRedSquare.layer; 
    CATransform3D initialTransform = theRedSquare.layer.transform; 
    initialTransform.m34 = 1.0/-1000; 

    [self setAnchorPoint:CGPointMake(-0.3, 0.5) forView:theRedSquare]; 


    [UIView beginAnimations:@"Scale" context:nil]; 
    [UIView setAnimationDuration:1]; 
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; 
    layer.transform = initialTransform; 


    CATransform3D rotationAndPerspectiveTransform = theRedSquare.layer.transform; 

    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, M_PI , 0 , -theRedSquare.bounds.size.height/2, 0); 

    layer.transform = rotationAndPerspectiveTransform; 

    [UIView setAnimationDelegate:self]; 
    [UIView commitAnimations]; 
} 

dahili edilir ve biraz tweaked .. Umarım Changing my CALayer's anchorPoint moves the view

+0

Mükemmel, teşekkürler! – JonB

+0

Animasyonu yalnızca animasyonlu hale nasıl geçirirsiniz? (Bu Flip) Ben bunu anlamak için saatlerce çalışıyorum. – Frankrockz

2

bir CALayer arasında anchorPoint kabul edilebilir aralığı [0,1] 'dır. Durumunuzda, Y eksenini çevirmeye çalıştığınız yerde, tabakanın çapa noktası [0,5,5] olmalıdır. Eğer bir meydana, kendi görünümünü yaparsanız

+0

Bu çalışma cezası vardı yardımcı olur ama kırmızı UIView, animasyonu başlatmadan hemen önce kayıyor. Video çekmeye çalışacağım. AnchorPoint işleri için ilginç bir şekilde -0.3, sola doğru y ekseni ofseti etrafında döner. – JonB

+0

, sorunu göstermek için bir video ekledi. Animasyonun ilk çalışmasında kare, birkaç piksele kaydırır. işe yaramış gibi görünmüyor. – JonB

3

, saygısız Bu Alındığı

[UIView beginAnimations:@"flip" context:nil]; 
[UIView setAnimationDuration:.35f]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft 
    forView:self.window cache:YES]; 

// change to the new view (make this one hidden, the other not) 

[UIView commitAnimations]; 
+0

Takdir ettiğim açıklamadan aşırı derecede açık değildi, ama ben noktadan geçtikten sonra değilim. Kızıl meydanımın sol kenarı etrafında çevirmek istiyorum (zaten bir UIView). Aşağıdaki videodan sonra görüyorum efekti: http://www.youtube.com/watch?v=wgoGDPF_NGo – JonB

İlgili konular