2013-06-26 2 views
4

У меня есть UIImageView в контроллере. Возможно ли сделать определенные области изображения видимыми?Получите жесты касания только на части зрения

Пример: У меня есть изображение карты. Сделать доступными только объекты POI. Не весь образ. Это возможно?

+0

Вы можете добавить 'UIView' на этой области и дать свой цвет на' clearColor' и добавить tapGesture на нем ... – TheTiger

+0

Я уже пробовал этот метод :) Проблема в том, что, если я увеличиваю масштаб изображения, вид остается тем же самым пятном, пока изображение изменяется. Другая проблема, с которой я столкнулся, заключается в том, что если у меня есть увеличенное изображение в scrolliew, если я положил 'UIView' поверх' UIScrollView', прокрутка перестанет работать. – Isuru

+0

Вы можете рассчитать фрейм этого вида после увеличения или уменьшения ... нескольких высот и ширины с помощью шкалы масштабирования. Вам нужно будет сделать некоторые логины здесь :) – TheTiger

ответ

2

Да, возможно, но вы должны спросить себя, стоит ли оно того или нет. Если бы это был я, я бы добавил объект интереса на карту и приложил распознаватель жестов к , вместо этого. Тем не менее, если вы хотите пойти другим путем вы можете посмотреть в следующий метод UIGestureRecognizerDelegate

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 

это будет сказать, должен ли этот жест обработать данную связь. Вы можете отфильтровать его на основе ваших POI.

9

Вы можете использовать ручку Gesture. Прежде всего, необходимо создать место, чтобы получить штрихи и вы должны сравнить его с сенсорным место в методе делегата, как показано ниже:

CGRect locationRect; 

в viewdidload

locationRect = CGRectMake(CREATE A FRAME HERE); 

рядом метода делегата

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer { 
    CGPoint p = [gestureRecognizer locationInView:self.view]; 
    if (CGRectContainsPoint(locationRect, p)) { 
     NSLog(@"it's inside"); 
    } else { 
     NSLog(@"it's outside"); 
    } 
} 
+7

Этот ответ такой милый, у меня теперь диабет. – GeneCode

0

Да, я могу вам помочь. Недавно я попытался создать собственный сегментированный элемент управления, в котором у меня было три вида.

ПОСМОТРЕТЬ ПЕРВОЕ ПОЛОВИНА ВЗГЛЯДА TapGesture WORKED. Но остальные половина ответа. Я проверил его, и результат полезен вам сейчас.

Мой кадр сегмента:

segment.frame = CGRectMake (0, 0, 300, 100);

И рама UIView является:

view1 = [[UIView Alloc] initWithFrame: CGRectMake (10, 80, 100, 40)];

Тогда я изменил высоту кадра до 200 А потом он работал:

segment.frame = CGRectMake (0, 0, 300, 200);

** Так что если вы хотите сделать, TAP-ПРИЗНАНИЕ ТОЛЬКО ЧАСТЬ ВАШЕГО взгляд, уменьшить высоту фоторамке THATS IT **

0

Благодаря manujmv, я был в состоянии выяснить, Swift 3 Реализация Пользовательская зона жестов. В моем случае я создаю 50-точечные полосы на каждой стороне окна для перехода от одного VC к другому.Но это должно быть довольно просто повторно использовать это для любого другого приложения:

class ViewController: UIViewController { 
    ... 
    var mySensitiveArea: CGRect? 
    ... 
    override func viewDidLoad() { 
    ... 
    let screenWidth = UIScreen.main.bounds.size.width 
    let screenHeight = UIScreen.main.bounds.size.height 
    mySensitiveArea = CGRect(0, 0, 50, screenHeight) 
    let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(_:))) 
    swipeGesture.direction = UISwipeGestureRecognizerDirection.right 
    self.view.addGestureRecognizer(swipeGesture) 
    } 
} 

//Function for determining when swipe gesture is in/outside of touchable area 
func handleGesture(_ gestureRecognizer: UIGestureRecognizer) { 
    let p = gestureRecognizer.location(in: self.view) 
    if mySensitiveArea!.contains(p) { 
     print("it's inside") 
     showMainViewController() 
    } 
    else { 
     print("it's outside") 
    } 
} 

//Segue to Main VC 
func showMainViewController() { 
    self.performSegue(withIdentifier: "toMain", sender: self) 
}