2010-10-16 15 views
8

Oyuncular için konumların bulunduğu bir spor sahası haline sürükleyip bırakma işlevselliği ekliyoruz.iOS - Sürüklenme algılamayı sürükleyip bırakın Seçilen öğenin başka bir alt görünüme geçtiği zaman nasıl algılanır?

Konumlar, her biri ayrı bir UIImageView olan Arabirim Oluşturucusu kullanılarak eşleştirilir.

Oyuncu görüntülerini, ekranın kenarındaki tezgah konumlarından sahadaki konumlara sürükleyebilmeyi istiyoruz.

Hareket halindeki seçili oyuncu mevcut bir gamePosition görüntüsü ile çarpıştığında en iyi nasıl tespit edebiliriz?

Geçerli konum altında bir görünüm veya ImageView olup olmadığını algılamanın bir yolunu arıyoruz. Yerinizde olsam size subviews

for (UIView *anotherView in self.subviews) { 
    if (movingView == anotherView) 
     continue; 
    if (CGRectIntersectsRect(movingView.frame, anotherView.frame)) { 
     // Do something 
    } 
} 

ait andan itibaren çerçeveli intersects hareket ediyor öğenin çerçevesi, ben bir NSArray ve tüm oyun alakalı öğeler eklemek olsaydı

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    tile1.center = location; 

    if gamePositionExistsAtCurrentLocation(location) { //want something like this 
    [tile1 setBackgroundColor:[UIColor blueColor]]; 
    } else { 
    [tile1 setBackgroundColor:[UIColor yellowColor]]; 
    } 
} 

cevap

14

onay -Bunun içinden geç. Böylece oyun gibi etiketlerinizle alakası olmayan alt görüntülerle çarpışmaları algılamazsınız.

+0

CGRectContainsPoint() ile view.center Yani fikir dikkate almak isteyebileceği Hareket her seferinde nesneler dizisi üzerinden çalışmasını ve onlar (siz söz yerine Çerçeveyi kullanarak ama) benim şimdiki konumuyla aynı olmadığını görmek? – Evolve

+0

Hangi alt görünümlerin belirli bir nokta ile kesiştiğini bana bildirmek için kullanabileceğim herhangi bir elma var mı? – Evolve

4

Ayrıca

+0

Yöntem şu biçimi alır: CGRectContainsRect (<# CGRect rect1 #>, <#CGRect rect2 #>) view.center veya location.centre öğesini rect olarak nasıl temsil edebilirim? – Evolve

+0

CGRectContainsRect(), CGRectContainsPoint() işlevini kullanıyordum. Düşman dikdörtgeniniz önemli ölçüde daha büyük olmadıkça ilkini kullanmayın, çünkü yalnızca bir dikdörtgen bir diğerinin içinde olduğunda doğrudur. – Nimrod

+0

Üzgünüm, kötü .. mesajını oku ... teşekkürler. Hallettim. Öneriniz çok yardımcı oldu. – Evolve

İlgili konular