2009-05-09 28 views
13

iPhone projelerimden birinde, dokunarak ve sürükleyerek dolaşabileceğiniz üç görünümüm var. Ancak, iki parmağınızı kullanarak kullanıcının iki görüntüyü aynı anda hareket ettirmesini durdurmak istiyorum. Bu nedenle UIView.exclusiveTouch ile herhangi bir başarı göstermeden denemeye çalıştım. mülkiyet eserleri, ben görünümü denetleyicisi aşağıdaki kodla, yepyeni bir proje hazırlandı nasılNeden UIView.exclusiveTouch çalışmıyor?

anlamak için:

- (void)loadView { 

    self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    UIButton* a = [UIButton buttonWithType:UIButtonTypeInfoDark]; 
    [a addTarget:self action:@selector(hej:) forControlEvents:UIControlEventTouchUpInside]; 
    a.center = CGPointMake(50, 50); 
    a.multipleTouchEnabled = YES; 

    UIButton* b = [UIButton buttonWithType:UIButtonTypeInfoDark]; 
    [b addTarget:self action:@selector(hej:) forControlEvents:UIControlEventTouchUpInside]; 
    b.center = CGPointMake(200, 50); 
    b.multipleTouchEnabled = YES; 

    a.exclusiveTouch = YES; 

    [self.view addSubview:a]; 
    [self.view addSubview:b]; 

} 

- (void)hej:(id)sender 
{ 
    NSLog(@"hej: %@", sender); 
} 

bu çalıştırırken, hej: Herhangi basıldığında, farklı gönderenler ile çağrılan düğmelerinden biri - bir tanesi exclusiveTouch'a EVET olarak ayarlanmış olsa bile. MultipleTouchEnabled hatlarını yorumlamaya çalıştım, boşuna. Biri bana burada neyi özlediğimi açıklayabilir mi?

sayesinde The iPhone OS Programming Guide itibaren Eli

cevap

18

:

tek görünüme olay teslimatı kısıtlama: Varsayılan olarak

, bir görünümün exclusiveTouch özelliği HAYIR olarak ayarlanır. özelliğini YES olarak ayarlarsanız, görünümü işaretlerseniz, dokunuşlarını izliyorsa, izleyen pencerede tek görüntüdür. Penceredeki diğer görünümler bu dokunuşları alamaz. Bununla birlikte, “özel dokunma” olarak işaretlenmiş bir görünümü, aynı pencerede diğer görünümlerle arasındaki bağlantıların ilişkili olduğunu kabul etmez. Bir parmak özel dokunuşlu bir görünümle temas kuruyorsa, bu dokunuş yalnızca bu pencerede bir parmağı izleyen tek görünüm olan ise iletilir. Bir parmağı, münhasır olmayan bir görünüme dokunduğunda, bu dokunma yalnızca özel bir görünümde başka bir parmak izi yoksa gönderilir.

Özel dokunma özelliğinin görünümün çerçevesi dışındaki dokunuşları ETKİLEMEZİ belirtir.

Bunu geçmişte ele almak için, her alt görünümün izine dokunmak yerine TÜM TOKULARı ekranda izlemek için ana görünümü kullanıyorum. en iyi yolu yapmaktır:

@Bradlarson Ben belgelere geçerli bağlantı ile OP güncellenen
if(CGRectContainsPoint(thesubviewIcareAbout.frame, theLocationOfTheTouch)){ 
    //the subview has been touched, do what you want 
} 
+0

, sen RichardJ.RossIII @ –

+0

:) bekliyoruz - Yani gittiği yer zaten. Geçen gün olay elleçleme belgelerini nereye koyduğunu arıyordum. Teşekkürler. –

+0

Yorumunuzun, doktorun söylediği şey olduğunu sanmıyorum. Doktora göre, sanırım eliego'nun kodu beklendiği gibi çalışmalı. Değilse, UIKit ya da doc bir hatadır. – an0