2012-02-10 5 views
9

için Objective-C alana ayarlamayla düşmesi nasıl.sürükle programlamak ve ben IOS platformu için Objective-C şey uygulamak arıyorum IOS

Ben, iki GUI nesneleri var Sadece onlar basitlik için UIImages ve kare şekilleri diyelim istiyorum.

sonra sadece aynı büyüklükteki bir silik kare bir "boş" GUI öğesi var.

Kullanıcının kare görüntülerden birini boş kareye sürükleyebilmesini ve görüntünün bir kısmı boş kareye dokunabildiği sürece bu boş kareye yapışıp dolduracağını istiyorum. Ve eğer görüntüyü başka bir yere bırakırlarsa, orijinal konumuna geri dönerler.

yanı ben kendi aralarında çalışamaz 2 diğer kare görüntü ve aynı etkileşimi ile böyle başka boş kare ama 2 görüntülerin her grubu ve 1 boş kare olmasını isterim. yani ilk iki görüntü sadece ilk boş kareye düşebilir.

ben yakalamak ve görüntü meta veri ister içine düştü ediliyor boş kare ile eşleşirse sonra belirlemek için arıyorum bazı damla olay olacağını varsayıyorum. Eğer herhangi bir kod örnekleri biliyor ya ben kesinlikle anlamak için kod üzerinden çalışabilir apps orada ya da o bana gelin bazı nesneler, olaylar ve özellikleri varsa çok iyi olurdu Eğer

.

Bu bir uygulama olduğu kadar bir oyun için değil bu yüzden oyun motorlarının herhangi çalışmak tercih ediyorum ama bunu yapmak için kolay bir yol ise o zaman bütün bu yanayım.

cevap

13

Bunu oldukça kolay bir şekilde yapabilirsiniz. Görüntüye bir UILongPressGestureRecognizer eklersiniz ve eylem yönteminde, görüntünün konumunu parmak hareketine göre güncellersiniz. Jestin geçerli konumunu - (CGPoint)locationInView:(UIView *) ile alın. Her hareketin ardından, görüntü çerçevesinin hedef alanın çerçevesini örtüşüp örtüşmediğini kontrol edebilir ve eğer varsa, yerine oturtun. örtüşme kontrol ediliyor

(görüntü verilmiş ve hedef her ikisi de aynı görünüm hiyerarşi içinde yer alan) oldukça basittir: kullanıcı dışında bırakılan eğer

CGRect imageRect = [image convertRect:image.frame toView:[image superview]]; 
CGRect targetRect = [target convertRect:target.frame toView:[image superview]]; 
if (CGRectIntersectsRect(imageRect, targetRect)) { 
    // overlap 
} 

görüntüyü geri taşımak için, bir yapabilirsiniz çerçeve veya merkez animasyonu orijinal konumuna geri döner. Böylece, sürükleme başladığında, eylem yönteminiz çağrılır. Örnek değişkeninizin, originalCenter adının CGPointZero'a eşit olup olmadığını kontrol edersiniz. Öyleyse, mevcut merkezi originalCenter'a kaydedersiniz. Kullanıcı resmi düşer ve battal beden hedef olduğunda

Sonra, geri hareket:

[UIView animateWithDuration:0.2 
       animations:^{ 
        image.center = originalCenter; 
        self.originalCenter = CGPointZero; 
        }]; 
+0

Teşekkür Pascal. Birkaç takip sorumlum var. Kullanıcı sadece bir damla düşürdüğünde kesişen bir çağrı yapmak istiyorsam, karşılaştırmayı kesiştirmek için hangi olayı kullanmalıyım? Ve sürüklediğim görüntüde mi yoksa düştüğüm karede mi? Ve eğer kullanıcı benim boş karemomun dışına düşerse, görüntüye X.Y'ye geri dönmesini ve kullanmak için animasyon veya hareket hızını söylemek için arayabileceğiniz bazı hazır animasyonlar var mı? – user461051

+0

Aradığım şeylerin bazı bileşenlerine sahip Stack Overflow hakkında birkaç makale daha buldum. UIImage'da bir touchEnded yöntemini yerleştirip eklemediğimi merak ediyorum ve bu dokunuşun X.Y'si doğru boş karenin CGRect'inde olup olmadığına bakın. Daha sonra bu noktada, görüntü alanının sol üst kısmının X.Y'sini boş karenin sol üst köşesi olacak şekilde ayarlayın.Görüntüyü orijinal X.Y.'ye geri döndürmenin en iyi yolunu bulmam gerekiyor. – user461051

+0

Geri nasıl taşıyabileceğinize bir örnek ekledim. Bu yardımcı olur mu? – Pascal