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ď č. 1Ak 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