2017-02-07 11 views
-1

Я хотел бы определить зону с кликами на картинке для проекта iOS. Кажется, что «Где Уолли». Когда я щелкнул в определенной зоне, Swift выполнит это действие. Есть также салфетки для управления. Я думал сделать прозрачную кнопку, но я не знаю, возможно ли это.Как определить зону в изображении в Swift 3

У вас есть идеи?

Thank's! :-)

ответ

1

Для прошивки, вы можете сделать это следующим образом:

(1) Не забудьте установить UIImageView, чтобы получить взаимодействие с пользователем, а также добавить UITapGestureRecognizer в UIImageView.

myImageView.isUserInteractionEnabled = true 
let tapGesture = UITapGestureRecognizer() 
tapGesture.numberOfTapsRequired = 1 
tapGesture.addTarget(self, action: #selector(tapDetected()) 

(2) Создайте новый CALayer, размер его, положение, и добавить его в слой с UIImageView в.

let tappableLayer = CALayer() // place this as a global variable 

tappableLayer.frame = // give a CGRect size here, or you can make it a shape by declaring a UIBezierPath and making it a CAShapeLayer 
myImageView.layer.addSublayer(tappableLayer) 

(3) код функции tapDetected.

func tapDetected(_ recognizer:UITapGestureRecognizer) { 
    let p = recognizer.location(in: self) 
    if tappableLayer.hitTest(p) != nil { 
     // user tapped in your defined area of the image 
    } 
} 
+0

Хороший ответ. Сначала я задавался вопросом, почему вы используете CALayer, а не просто CGRect, но возможность использовать разные формы для 'hitTest' потрясающая! – Kie

+0

Метод hitTest() относится ко всем * CALayers. Если вы просто включили его для слоя myImageView, вы обнаружите весь вид. поэтому другая причина, по которой я не просто использовал CGRect, заключалась в том, что у этого метода нет метода hitTest(). – dfd

+0

1. Я не вижу, как это относится к моему комплименту о вашем ответе, но истинная история! :) 2. Для этого можно использовать 'CGRectContainsPoint', я думаю. – Kie