iPhone - UIScrollView ... de coördinaten van een aanraking detecteren

Mogelijk duplicaat:
   UIScrollview voor aanraakgebeurtenissen

Is het mogelijk om te detecteren waar in een UIScrollView de vinger is aangeraakt?

Ik bedoel, stel dat de gebruiker zijn vinger op deze manier gebruikt: tikken en scrollen, de vinger opheffen en opnieuw, tikken en scrollen, enz. Is het mogelijk om het CGPoint te kennen waar de tikken plaatsvonden in relatie tot het zelf. Bekijk de scroller is in? De scroller neemt het gehele zelfbeeld in beslag.

Bedankt.

6

4 antwoord

You can do it with gesture recognizers. For detect single tap location use UITapGestureRecognizer

UITapGestureRecognizer *tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)] autorelease];
[myScrollView addGestureRecognizer:tapRecognizer];

- (void)tapAction:(UITapGestureRecognizer*)sender{ 
    CGPoint tapPoint = [sender locationInView:myScrollView];
    CGPoint tapPointInView = [myScrollView convertPoint:tapPoint toView:self.view];
}

Als u dat tapPoint naar self.view wilt converteren, kunt u convertPoint: toView: -methode in UIVIEW-klasse

12
toegevoegd
Nee. tapAction wordt gewoon geactiveerd als ik tik en niet scrol. Als ik het leuk vind, zei ik, tik, scrol, til de vinger op, tik op, scrol, til de vinger op, enzovoort, er wordt nooit getikt. Er wordt ook nooit tikken gedetecteerd als de schuifbalk ook na een grote uithaal verschuift. De scroller moet stil zijn en er moet een droge tik worden gemaakt om dit te laten werken.
toegevoegd de auteur SpaceDog, de bron
@beryllium Waarom doet u niet [afzender locationInView: myScrollView]?
toegevoegd de auteur Paul Brewczynski, de bron
Er zijn veel andere herkenners voor gebaren: UIPanGestureRecognizer, UIPinchGestureRecognizer, UISwipeGestureRecognizer, UIRotationGestureRecognizer. Bovendien kunt u aangepaste herkenner maken om zeer complexe aanrakingen te detecteren. Ik gaf het meer populaire voorbeeld met eenvoudige aanraking.
toegevoegd de auteur beryllium, de bron
@RubberDuck Heb je dit ontdekt? Ik zit in dezelfde boot ... Ik werk aan een UICollectionView, ik wil detecteren of een vingeraanraking op de celweergave is
toegevoegd de auteur x.y, de bron
Ik heb UIkit.framework onder mijn raamwerk, maar ik kan er niet achter komen UITapGestureRecognizer . Wanneer ik UITapGestureRecognizer probeer te schrijven, krijg ik de foutmelding 'Niet gevonden'.
toegevoegd de auteur Adil Malik, de bron

Neem een ​​kijkje op raaktBegan: withEvent: U krijgt een NSSet van UITouch's , en een UITouch bevat een locationInView: methode die het CGPoint van de aanrakingen teruggeeft.

0
toegevoegd
In dit geval moet u UIScrollView subclassiseren
toegevoegd de auteur beryllium, de bron
0
toegevoegd
het is niet zo eenvoudig. TouchesBegan detecteert gewoon een aanraking als de scrollweergave stil is als deze al beweegt en ik hem aanraak, raaktBegan detecteert niets.
toegevoegd de auteur SpaceDog, de bron

Je zou de locatie in de weergave kunnen vinden en er de scroll ofset aan toevoegen. Uw volgende probleem is nu dat - (ongeldig) raaktBegan: raakt: gebeurtenis niet wordt aangeroepen omdat de gebeurtenissen naar uw scrollview worden verzonden. Dit kan worden verholpen door uw UIScrollView te subclassificeren en de scrollview de aanraakgebeurtenissen naar de volgende responder (uw weergave) te laten sturen.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   //Position of touch in view
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];

   //Scroll view offset
    CGPoint offset = scrollView.contentOffset;

   //Result
    CGPoint scrollViewPoint = CGPointMake(touchPoint.x, touchPoint.y + offset.y);
    NSLog(@"Touch position in scroll view: %f %f", scrollViewPoint.x, scrollViewPoint.y);
}
0
toegevoegd
Nee. touchesBegan wordt zojuist geactiveerd als ik tik en niet scrol. Als ik het leuk vind, zei ik, tik, scrol, til de vinger op, tik op, scrol, til de vinger op, enzovoort, er wordt nooit getikt. Er wordt ook nooit tikken gedetecteerd als de schuifbalk ook na een grote uithaal verschuift. De scroller moet stil zijn en er moet een droge tik worden gemaakt om dit te laten werken. Het is niet gemakkelijk zoals het lijkt.
toegevoegd de auteur SpaceDog, de bron