Hogyan lehet törölni egy sorozata UITouch események?

szavazat
20

Van egy UIImagevéleményen van, hogy reagál, hogy megérintse eseményeket. Azt akarom, hogy megszünteti a kapcsolatot szekvencia, azaz további hívásokat touchesMoved:, ha az érintés túlhaladja bizonyos határokat. Hogyan tehetem ezt meg?

Tudom, hogy touchesMoved:én is vizsgálja meg a koordinátáit az érintés tárgy és figyelmen kívül hagyja, de amit nem tudom, hogyan lehet törölni a sorozat összesen. Nem látok semmilyen módszert dokumentálni kell az Apple Developer UIResponderReference hogy tudok hívni, hogy megszünteti a touch sorozatot.

A kérdést 10/02/2009 19:37
a forrás felhasználó
Más nyelveken...                            


12 válasz

szavazat
6

Ez a megoldás lehet egy kicsit kludgy, de lehet végrehajtani, és kézzel hívja

- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

Én alapozza ezt a megoldást lazán néhány csípés tettem a moveme minta alkalmazást az Apple iPhone mintakódot hely, ahol én módosította a touchesMovedmódszert a következőképpen néz ki:

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *touch = [touches anyObject];
     if ([touch view] == placardView)
         CGPoint location = [touch locationInView:self];
         placardView.center = location;
         // I added the following line:
         [self touchesCancelled:touches withEvent:event];
         return;
}
Válaszolt 10/02/2009 20:51
a forrás felhasználó

szavazat
3

Próbálja ideiglenes beállítása UIImageView azon userInteractionEnabled ingatlan NO

Válaszolt 28/11/2011 04:30
a forrás felhasználó

szavazat
3

Meg kell hívni [super touchesMoved:withEvent:]annak érdekében, hogy hagyja, hogy a szuper kilátás tisztítsák meg az eseményt, de még ennél is fontosabb, meg kell ne hívja [super touchesCancelled:withEvent:].

Itt van, amit használni egy cellában, hogy tartsa a szerzés kiválasztott amikor érzékel egy ellop:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!showingEdit) {
        if (IS_FAR_ENOUGH_TO_BE_A_SWIPE) {
            RESPOND_TO_SWIPE
            showingEdit = YES;
            [super touchesCancelled:touches withEvent:event];
        } else {
            [super touchesMoved:touches withEvent:event];
        }
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    if (!showingEdit) {
        [super touchesEnded:touches withEvent:event];
    }
}
Válaszolt 13/05/2010 01:50
a forrás felhasználó

szavazat
2

Nem hiszem, hogy ez lehetséges, mert nem látom azt dokumentálják, és ezek egyike sem megoldás működik.

Válaszolt 21/11/2011 05:23
a forrás felhasználó

szavazat
2

Már szembe ugyanezzel a problémával és a közelmúltban megállapították szabványos módon megoldani. A [[UIApplication sharedApplication] beginIgnoringInteractionEvents], hogy állítsa le touchesMoved események az egész alkalmazást. Ügyeljen arra, hogy lehetővé tegye számukra a [[UIApplication sharedApplication] endIgnoringInteractionEvents] mikor kell fogadni simításokat újra.

Válaszolt 05/04/2010 10:30
a forrás felhasználó

szavazat
1

Azt elérni ezt eltávolításával a kilátás a SuperView és hozzátéve, hogy egyenesen vissza.

[view retain];
UIView *sv = view.superview;
[view removeFromSuperview];
[sv addSubview:view];
[view release];

Ez megtöri a válaszadó láncot a nézetet, hogy a megmaradt simítások nem kapott a nézetet. A következő érintés továbbra is megkapta a szokásos módon.

Válaszolt 03/08/2016 10:44
a forrás felhasználó

szavazat
1

Ez a kód segít. Letiltom érintőképernyős esemény touchesMoved:módszer, és én így érintés esemény touchesCancelled:módszer

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
     UITouch *touch = [touches anyObject];
     .......
     .......
     Your code
     .......
     .......

     //Condition when you want to disable touch event

     [[UIApplication sharedApplication] beginIgnoringInteractionEvents];

     .......
     .......
     Your code
     .......
     .......
 }


- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [[UIApplication sharedApplication] endIgnoringInteractionEvents];
}
Válaszolt 21/08/2014 11:31
a forrás felhasználó

szavazat
1

„Brute force” megoldás, attól függően, hogy megfelel az Ön igényeinek: Vegye ki, majd formázza meg a subview hogy megkapja a érint, illetve válaszol rájuk (persze vigyázni keret és tartalom).

Válaszolt 24/03/2013 21:56
a forrás felhasználó

szavazat
0

Csak próbálják megoldani valamit, mint ez, és megállapította, hogy sem a felsorolt ​​megoldási neki dolgozott nekem. A legjobb tudtam kezelni átmenetileg figyelmen kívül hagyva az ér, de akkor folytatható, ha az érintés újra belépett a nézetet.

Végül megoldotta.

  1. Hozzunk létre egy logikai zászló úgynevezett „fogyatékos”
  2. A touchedMoved először ellenőrizze, hogy az érintés belül a kívánt nézetet. Ha nem, állítsa be a fogyatékkal zászlót YES.
  3. Még mindig a touchedMoved, ellenőrizze a zászlót, mielőtt a művelet végrehajtása során. Tehát ezen a ponton semmi sem fog történni, ha ők az ablakon kívül.
  4. A touchesEnded állítsa a fogyatékkal zászlót NO. Tehát az érintés szekvencia hatékonyan leáll, amíg a felhasználó felemeli az ujját.

Azt hiszem, ez működni fog az Ön számára, ha van egy konkrét oka szó, akiknek az érintés szekvenciát törölték.

Válaszolt 13/01/2013 15:41
a forrás felhasználó

szavazat
0

Az iOS5 úgy tűnik, hogy egy privát módszer UITouch

-(void)setSentTouchesEnded:(BOOL)ended;

Attól függően, hogy az Apple végrehajtás lehetett megállítani küldő események

Egy másik módja az, hogy fogja használni asszociatív tárgyak

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if ([(NSNumber *)objc_getAssociatedObject(touch, &outKey) boolValue])
        return;
    if (sometouchisoutsideofview) {
        objc_setAssociatedObject(touch, &outKey, [NSNumber numberWithBool:YES], OBJC_ASSOCIATION_RETAIN);
    }
}
Válaszolt 25/11/2011 19:44
a forrás felhasználó

szavazat
-1

Létre lehet hozni kategória UITouch. Tudod, hogy állapítsa

@property (nonatomic,strong,readwrite) UIView *view;

És ha megváltoztatja touch.view nulla volt, például akkor szimulálni végén diszpécser érintési események

Válaszolt 17/04/2013 20:43
a forrás felhasználó

szavazat
-2

Meg tudja nézni, hogy a tapintási helyek vannak CGRect (azaz. Pont a téglalap a Kamerák), vagy sem. Ha ők nem, hogy téglalap, az érintés törlésre kerül.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
 {
UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInView:self.view];

    if (CGRectContainsPoint(myImageView, touchLocation))
    {
       lastPoint = [touch locationInView: myImageView];
    }

    NSLog(@"Last :%.2f - %.2f",lastPoint.x, lastPoint.y);   
  }

 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
 {
  CGPoint currentPoint;
  UITouch *touch = [touches anyObject];
  CGPoint touchLocation = [touch locationInView:self.view];

     if (CGRectContainsPoint(myImageView.frame, touchLocation))
     {
       currentPoint = [touch locationInView: myImageView];
     }
 }
Válaszolt 24/11/2011 06:44
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more