webentwicklung-frage-antwort-db.com.de

UITapGestureRecognizer funktioniert nicht in UIImageView

Ich hatte folgenden Code:

UITapGestureRecognizer *showStoryTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showNewsStory:)];
[showStoryTapRecognizer setDelegate:self];
[self.storyImageView_ addGestureRecognizer:showStoryTapRecognizer];
[showStoryTapRecognizer release];

Dies löst jedoch nicht die showNewsStory aus, warum ist das so? Ich habe userInteraction in der Bildansicht aktiviert.

22
xonegirlz
UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)];

[oneTouch setNumberOfTouchesRequired:1];

[imageView addGestureRecognizer:oneTouch];

imageView.userInteractionEnabled = YES;
49
user1503512

Sie sollten die Benutzerinteraktion für UIImageView-Objekt aktivieren:

[self.storyImageView_ setUserInteractionEnabled:YES];

BEARBEITEN:

Versuchen Sie das zu entfernen

[showStoryTapRecognizer setDelegate:self];

Ich glaube nicht, dass UITapGestureRecognizer soweit ich weiß, seine Delegiertenmethoden hat. </ Strike>

71
Kjuly

UIImageView ist die einzige Unterklasse von UIView in UIKit, in der die Benutzerinteraktion standardmäßig deaktiviert ist.

9

Vielleicht ... action:@selector(showNewsStory) statt action:@selector(showNewsStory:). Bitte überprüfen Sie es. Gibt es eine andere UITapGestureRecognizer in dieser Steuerung? Versuche dies:

otherTapRecognizer.cancelsTouchesInView = NO;
4
Carina

Ich habe auch bemerkt, dass in Swift3, wenn Sie eine Gestenerkennung hinzufügen, die ebenfalls nach dem Ziel sucht und das Ziel normalerweise self ist, Sie die UIView, zu der Sie die Gestenerkennung hinzufügen, als lazy var definieren lassen. Andernfalls funktioniert die Gestenerkennung nicht. Ich denke, das ist ein Fehler in Swift3. Wenn Sie in einer Variablen auf sich selbst zugreifen, bevor die Klasse vollständig initialisiert ist, wird im Idealfall ein Fehler ausgegeben. Der folgende Code erkennt keine Gestenerkennung.

let messageImageView: CachedImageView = {
    let iv = CachedImageView()
    iv.translatesAutoresizingMaskIntoConstraints = false
    iv.layer.cornerRadius = 16
    iv.layer.masksToBounds = true
    iv.contentMode = .scaleAspectFill
    iv.isUserInteractionEnabled = true
    let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
    zoomTap.numberOfTapsRequired = 1
    iv.addGestureRecognizer(zoomTap)
    return iv
}()

Um dies zu beheben, müssen Sie lazy var verwenden.

lazy var messageImageView: CachedImageView = {
    let iv = CachedImageView()
    iv.translatesAutoresizingMaskIntoConstraints = false
    iv.layer.cornerRadius = 16
    iv.layer.masksToBounds = true
    iv.contentMode = .scaleAspectFill
    iv.isUserInteractionEnabled = true
    let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
    zoomTap.numberOfTapsRequired = 1
    iv.addGestureRecognizer(zoomTap)
    return iv
}()
3
quantdaddy

zielsetzung 10

UITapGestureRecognizer *oneTouch=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(OneTouchHandeler)];

[oneTouch setNumberOfTouchesRequired:1];

[imageView addGestureRecognizer:oneTouch];

imageView.userInteractionEnabled = YES;

// Swift 3.0

   let oneTouch = UITapGestureRecognizer(target: self, action: #selector(self.OneTouchHandeler(_:)))

imageView.addGestureRecognizer(oneTouch)

imageView.isUserInteractionEnabled = true
1
dahiya_boy

wenn Sie zwei verschiedene Gesten zugelassen haben, sollten Sie das folgende Code-Snippet hinzufügen. Sie verwenden beispielsweise pickerView und möchten auch die Tap-Geste für denselben pickerView erkennen.

Fragt den Delegierten, ob zwei Gestenerkenner gleichzeitig Gesten erkennen dürfen.

Ziel c

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return true;
}

Swift

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return true
}
0
Emre Gürses

Wenn Sie imageView.userInteractionEnabled = YES; bereits eingestellt haben, die Aktion jedoch immer noch nicht ausgelöst wird. Vielleicht liegt es daran, dass für eine der Überwachungen von imageView userInteractionEnabled NEIN lautet.

0
dopcn