/ / Ako identifikovať udalosť dotykového tlačidla z iných udalostí dotyku - kokos-dotyk, uiimageview, uibutton, touch

Ako zistiť udalosť dotyku tlačidla z iných udalostí dotyku - kakao-dotyk, uiimageview, uibutton, touch

Mám aplikáciu, v ktorej môže používateľ interagovať s mnohými objektmi. To je niekoľko UIButtons, zopár UILabels a veľa UIImageViews.

Ohnisko všetkých interakčných centier sa dotýka dotyku UIImageView objektov. Pomocou dotyku môžem obrázky premiestniť, povedzte im, aby to alebo ono urobili. Mojou súčasnou prekážkou však je vedieť, ako správne aplikáciu rozlišovať dotyky, ktoré sa vyskytujú, keď sa dotýkam a UIButton.

Prečo? Logika v rámci udalosti Touches Began je určená len pre UIImageViews, ale v okamihu, keď sa dotýkam tlačidla alebo akéhokoľvek iného objektu, aplikácia interpretuje dotyk, ako keby došlo k a UIImageView objekt.

Takže môj prístup sa znižuje na: existuje dobrý spôsob, ako zistiť, či došlo k dotyku pre a UIButton, UIImageView, UILabel namietať? Týmto spôsobom môžem vyfiltrovať nepotrebné dotyky v mojej aplikácii od príslušných.

UPRAVIŤ:

Nižšie uvedený kód načrtáva, ako zachytiť dotykovú udalosť, ale neviem, ako z danej udalosti poznať, či ide o tlačidlo alebo zobrazenie, na ktoré som sa dotkol.

touch = [touches anyObject];
touchLocation = [touch locationInView:[self view]];

odpovede:

1 pre odpoveď č. 1

Ak chcete zistiť, či je stlačený UIButton, postupujte nasledovne:

-(void) touchBegan : (NSSet *) touches withEvent : (UIEvent *) even
{

UITouch *touch = [touched anyObject];
UIView *touchedView = [touch view];

if([touchedView isMemberofClass : [UIButton class])
{
//do something when button is touched
}
}

1 pre odpoveď č. 2

volanie hitTest:withEvent: na zobrazenie s dotykovou udalosťou získate zobrazenie, ktoré sa momentálne dotýka. Potom môžete použiť isKindOfClass: skontrolovať, aký typ zobrazenia je a odpovedať zodpovedajúcim spôsobom.


1 pre odpoveď č. 3

môžete použiť túto metódu: -

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if ([self pointInside:point withEvent:event]) {
//You clicked inside the object
}
return [super hitTest:point withEvent:event]
}

a Wain vám už dal vysvetlenie.

https://stackoverflow.com/a/18051856/1865424