Kullanıcının kartları her zamanki gibi sürüklemesini sağlayan basit bir iOS solitaire oyunu uyguluyorum. Kartlar UIView
alt sınıf CardView
ile temsil edilir. Tüm kart görünümleri, SolitaireView
'un alt görünümleri olan kardeşlerdir. Aşağıdaki Ön bilgi sürüklenen gibi tüm diğer görüntüleme civarında olacak şekilde "ön bir kart getir" çalışır: UIView bringSubviewToFront: does * not * önden görünümü getir
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if (touch.view.tag == CARD_TAG) {
CardView *cardView = (CardView*) touch.view;
...
[self bringSubviewToFront:cardView];
...
}
}
Maalesef kartın z sırasını sürükle sırasında değişmeden kalır. Aşağıdaki resimlerde, Kral'ı sürüklüyorum. Ben aynı zamanda
layer.zPosition
özelliğini değiştirmek çalıştı
: Bu üst sol görüntüde Nine doğru olmakla sağ görüntüde (aslında tüm yığının altında) İki altında yanlış oluşuna dikkat edin hayır boşuna iyi. Sürükleme sırasında kart görünümünü öne nasıl getirebilirim? Ben gizemliyim.
ben' bringSubviewToFront keşfetti: Aşağıda kodda bunu kapat -
zPosition
genellikle animasyonlu değiştirerek unutmayın. 'LayoutSubviews' yöntemim de' bringSubviewToFront: 'işlevini çağırıyordu ve böylece tüm görünümleri z-siparişlerini ilk durumuna geri döndürdü! – wcochranO zaman bunun çözümü nedir? Aynı tür şartlara da sahibim, kartların listesinden, eğer orta sipariş kartlarından birini seçersem, gelmeli, sonra önden gelmeliyim. ama benim animomuz bringSubviewToFront nedeniyle çalışmaz: method – Mrunal
UIView alt sınıflarını kullanarak yapışırsanız, sürüklenen kartı işaretlemeniz gerekir, böylece layoutSubviews en üste yerleştirebilir. Ben aslında aşağıda belirtildiği gibi CALayers kullanmaya geçtim. – wcochran