2016-03-29 36 views
1

Başarılı bir uygulamayı tamamladım ve tüm cihaz boyutlarıyla uyumlu hale getirmeye çalışıyorum. Sorun şu ki, otomatik sıralama yöntemini denediğimde bir sorun olur. Hareketli görüntülerimi bozan Autolayout

Ben bir görüntüyü taşımak için çalışıyorum:
IMAGENAME.center = CGPointMake(IMAGENAME.center.x, IMAGENAME.center.y + 10); 

Sonra, diğer birçok görüntüleri de aşağı hareket var onun size düşen meyve yakalamak zorundayız gibi. Şimdi, işte sorun. Autolayout açıkken, bir meyve toprağa çarptığında ya da oyunda sepetle yakaladığımda, diğer meyveler, vurdukları yer de dahil, başlangıçta başladıkları yere geri aktararak, onları koydukları koordinatlara taşımak yerine örneğin bu kod ile gitmek için.

if (CGRectIntersectsRect(IMAGENAME.frame, Basket.frame) { 

    IMAGENAME.center = CGPointMake(600, 200); 
} 

Görüntünün gitmesi gereken konum budur, ancak otomatik düzenleme bunu engeller. Ama ben onu evrensel hale getirmek istiyorum ve "eski yol" u destekleyen başka bir ders bulamıyorum, bu yüzden birisi bana autolayout ile ne yapacağımı söyleyeyim ya da bana autolayout olmadan nasıl evrensel yapılacağını söyler mi?

cevap

0

Otomatik mizanpajı kullanırsanız, o zaman sonuna kadar gitmek zorundasınız.
Bu, koddaki çerçeveleri (bu, .center'in yaptığı) işlemek anlamına gelir.

Otomatik Düzenlemeyi "açtığınızı" yazdınız.
Bunu mu demek istediniz: Storyboard?
Bir storyboard olması durumunda, ilgili kısıtlamalar için IBOutlet özellikleri oluşturmalı ve storyboard içindeki kısıtlamaları çıkışlara (resim görünümleriyle birlikte) bağlamanız gerekir.

Her neyse, Autolayout'u kullanmak ve görünümleri kodda taşımak istiyorsanız, kısıtlamalarla yapılması gerekir.
Her kısıtlama, kodu değiştirebileceğiniz constant özelliğine sahiptir.
Durumunuz için, görüntüyü x ve y ile hareket ettirmek için 2 kısıtlamayı (bir yatay ve bir dikey) değiştirmeniz gerekir.

Merkezinizi değiştirmek için uygunsa, ana kısıtlamalarda ana ve dikey merkezde yatay merkez oluşturabilirsiniz.
Mevcut mantığınızda büyük değişiklikler yapmaktan kaçınmak için, ana sol/üst (orta yerine) yerine göre kısıtlamaları ayarlayabilirsiniz.
constant değerler IMAGENAME.center = CGPointMake(600, 200); kullanmak tamamen aynı değerlerle değişiklikler olması gerekecektir Bu şekilde - gibi bir şey olacak bunun yerine: Eğer autolayout etkinleştirirseniz

imageHorizontalCenterConstraint.constant = 600; 
imageVerticalCenterConstraint.constant = 200; 
[imageView.superview updateConstraintsIfNeeded]; 
0

Çalışmaz yapmak
1. view.frame = CGRectMake(20, 20, 100, 100) 
2. view.center = CGPointMake(150, 50) 

İhtiyaç: XIb'nin veya görsel görünümüne dikey kısıtlamalar Ekleme merkezini yatay ve merkezi: Örnek bir görünüm merkezini değiştirmek için. Bu kısıtlamaları IBOutlet olarak .m dosyasında yapın.

Güncelleme merkezi konumu aşağıdaki gibidir:

viewCenterHZConstraint.constant = 600; 
viewCenterVTConstraint.constant = 200; 
[self.view updateConstraintsIfNeeded];