ios - UIGestureRecognizer в UIImageView



objective-c (6)

У меня есть UIImageView , который я хочу изменить и повернуть и т. Д.

Может ли UIGestureRecognizer быть добавлен в UIImageView ?

Я хотел бы добавить распознаватель поворота и пинча в UIImageView который будет создан во время выполнения.

Как добавить этих распознавателей?


Answer #1

Решение Swift 2.0

В одной и той же усадьбе вы создаете кран, щепотку или сабвуфер распознавания жестов. Ниже я проведу вас через 4 шага, чтобы запустить ваш распознаватель.

4 шага

1.) Наследовать от UIGestureRecognizerDelegate , добавив его в подпись вашего класса.

class ViewController: UIViewController, UIGestureRecognizerDelegate {...}

2.) Управляйте перетаскиванием с вашего изображения на свой viewController для создания IBOutlet:

@IBOutlet weak var tapView: UIImageView!

3.) В вашем представленииDidLoad добавьте следующий код:

// create an instance of UITapGestureRecognizer and tell it to run 
// an action we'll call "handleTap:"
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
// we use our delegate
tap.delegate = self
// allow for user interaction
tapView.userInteractionEnabled = true
// add tap as a gestureRecognizer to tapView
tapView.addGestureRecognizer(tap)

4.) Создайте функцию, которая будет вызываться при прослушивании распознавателя жестов. (Вы можете исключить = nil если вы выберете).

func handleTap(sender: UITapGestureRecognizer? = nil) {
    // just creating an alert to prove our tap worked!
    let tapAlert = UIAlertController(title: "hmmm...", message: "this actually worked?", preferredStyle: UIAlertControllerStyle.Alert)
    tapAlert.addAction(UIAlertAction(title: "OK", style: .Destructive, handler: nil))
    self.presentViewController(tapAlert, animated: true, completion: nil)
}

Ваш последний код должен выглядеть примерно так:

class ViewController: UIViewController, UIGestureRecognizerDelegate {

    @IBOutlet weak var tapView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
        tap.delegate = self
        tapView.userInteractionEnabled = true
        tapView.addGestureRecognizer(tap)
    }

    func handleTap(sender: UITapGestureRecognizer? = nil) {
        let tapAlert = UIAlertController(title: "hmmm...", message: "this actually worked?", preferredStyle: UIAlertControllerStyle.Alert)
        tapAlert.addAction(UIAlertAction(title: "OK", style: .Destructive, handler: nil))
        self.presentViewController(tapAlert, animated: true, completion: nil)
    }
}

Answer #2

Вы также можете перетащить распознаватель жестов к представлению изображения в Storyboard. Затем создайте действие ctrl + drag для кода ...


Answer #3

Для любовника Blocks вы можете использовать ALActionBlocks чтобы добавить действие жестов в блок

__weak ALViewController *wSelf = self;
imageView.userInteractionEnabled = YES;
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithBlock:^(UITapGestureRecognizer *weakGR) {
    NSLog(@"pan %@", NSStringFromCGPoint([weakGR locationInView:wSelf.view]));
}];
[self.imageView addGestureRecognizer:gr];

Answer #4

Убедитесь, что userInteractionEnabled - YES на UIImageView . Затем вы можете добавить распознаватель жестов.

imageView.userInteractionEnabled = YES;
UIPinchGestureRecognizer *pgr = [[UIPinchGestureRecognizer alloc] 
    initWithTarget:self action:@selector(handlePinch:)];
pgr.delegate = self;
[imageView addGestureRecognizer:pgr];
[pgr release];
:
:
- (void)handlePinch:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
  //handle pinch...
}

Answer #5

Swift 4

myImageView.isUserInteractionEnabled = true
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector(("imageTapped:")))
tapGestureRecognizer.numberOfTapsRequired = 1
myImageView.addGestureRecognizer(tapGestureRecognizer)

и при постукивании:

func imageTapped(sender: UITapGestureRecognizer) {
   // do something when image tapped
   println("image tapped")
}

для Swift любителей:

    myImageView.userInteractionEnabled = true
    var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "imageTapped:")
    tapGestureRecognizer.numberOfTapsRequired = 1
    myImageView.addGestureRecognizer(tapGestureRecognizer)

затем при обращении изображения:

func imageTapped(sender: UITapGestureRecognizer) {
   // do something when image tapped
   println("image tapped")
}

Answer #6

Пример SWIFT 3

override func viewDidLoad() {

         self.backgroundImageView.addGestureRecognizer(
             UITapGestureRecognizer.init(target: self, action:
                 #selector(didTapImageview(_:))
             )
         )
         self.backgroundImageView.isUserInteractionEnabled = true
     }

     func didTapImageview(_ sender: Any) {
          // do something
     }
}

Никаких делегатов реконфигура жестов или других реализаций, где это необходимо.





uigesturerecognizer