2016-03-21 22 views
0

Bir kullanıcı dokunduğunda, belirtilen bir görünüme göre animasyon uygulamak ve kullanıcı tekrar dokunduğunda orijinal konumuna geri dönmek istiyorum. Görünümlerimi hizalamak için storyboardumda AutoLayout kullanıyorum. İlk önce mükemmel pozisyonda yukarı doğru gider, ancak orijinal konumuna mükemmel bir şekilde geri dönmez. ViewDidLoad yöntemimde bir CGFloat değişkeninde görünen başlangıç ​​değerini saklıyorum ve sonra görünümü geri getirmek için bu nesneyi yeniden atayım. İşte benim kodu (mükemmel çalışıyor Bu) yukarı için Canlandırma Aşağı içinAnimate UIView, mükemmel bir şekilde çalışmıyor

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.2]; 
CGRect frame = _pickLocationView.frame; 
frame.origin.y = _cityLabelView.frame.origin.y; 
_pickLocationView.frame = frame; 
[UIView commitAnimations]; 

Animasyon olduğunu. Çerçeve viewDidLoad içinde nihai boyutları ve konumu olması garanti

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.2]; 
CGRect frame = _pickLocationView.frame; 
frame.origin.y = kDefaultOriginOfPickLocationView; 
_pickLocationView.frame = frame; 
[UIView commitAnimations]; 
+0

Aşağıya Animasyonu nasıl diyorsunuz? –

+0

o görünümün varsayılan kaynağını atayarak –

cevap

0

Bir öneri: Animasyon başlamadan önce - [self setNeedsLayout] yöntemini kullanın.

+0

[self setNeedsLayout] yöntemini çağırmalı mıyım yoksa geçersiz kılmalı ve sonra mı çağırmalıyım? Üzgünüm, bu aptalca bir soru olsa da, iOS programlamasında yeniyim. –

+0

[UIView commitAnimation] 'dan önce kullanın. sadece yukarıdaki parça kodunu cevapıma yaz. herhangi bir değişiklik olup olmadığını görmek. değilse, commitAnimation'dan sonra yöntemi kullanmayı deneyin. –

0

(Bu yöntem bazı sorunlar vardır). Orijinal değerlerinizi ayarlamak için viewDidLayoutSubviews kullanın. Görünümünüzün sınırları değişirse viewDidLayoutSubviews'un birden çok kez çağrılabileceğini unutmayın.

Durumunuzda, ilk animasyonu başlatmadan hemen önce orijinal değeri de kaydedebilirsiniz.

İlgili konular