2016-11-01 3 views
0

Я создал подкласс UIView и добавил круг в верхнем правом углу окна. Затем я добавил UIPanGestureRecognizer в круг.UIGestureRecognizer не обнаружен на subview

Проблема в том, что жест распознается только в левой нижней части круга, где круг расположен над супер-видом.

Как я могу сделать весь круг обнаруженным признаком свойства?

enter image description here

Ниже весь класс код UIView подкласса я сделал.

import UIKit 

class ResizableImageView: UIView { 


private let circleWidth: CGFloat = 40 

var themeColor: UIColor = UIColor.magentaColor() 

lazy var cornerCircle: UIView = { 
    let v = UIView() 

    v.layer.cornerRadius = self.circleWidth/2 
    v.layer.borderWidth = 1 
    v.layer.borderColor = self.themeColor.CGColor 

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(buttonTouchMoved)) 
    v.addGestureRecognizer(panGesture) 

    return v 
}() 





// Init 

override init(frame: CGRect) { 
    super.init(frame: frame) 

    setupSubviews() 
    configureSelf() 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 



func setupSubviews() { 

    // Add cornerButton to self and set auto layout 
    addSubview(cornerCircle) 
    addConstraintsWithFormat("H:[v0(\(circleWidth))]", views: cornerCircle) // Extension code for setting auto layout 
    addConstraintsWithFormat("V:[v0(\(circleWidth))]", views: cornerCircle) 
    addConstraint(NSLayoutConstraint(item: cornerCircle, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .Right, multiplier: 1, constant: 0)) 
    addConstraint(NSLayoutConstraint(item: cornerCircle, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 0)) 


} 

func configureSelf() { 

    // Set border 
    layer.borderWidth = 1 
    layer.borderColor = themeColor.CGColor 
} 




// Gesture Event 

func buttonTouchMoved(gestureRecognizer: UIPanGestureRecognizer) { 

    let point = gestureRecognizer.locationInView(self) 
    print(point) 

} 


} 

ViewController

import UIKit 

class ImageViewCheckController: UIViewController { 

let imageView: ResizableImageView = { 
    let iv = ResizableImageView() 
    return iv 
}() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    title = "ImageViewCheck" 

    view.backgroundColor = UIColor.whiteColor() 

    setupSubviews() 
} 

func setupSubviews() { 
    view.addSubview(imageView) 

    view.addConstraintsWithFormat("V:|-100-[v0(200)]", views: imageView) 
    view.addConstraintsWithFormat("H:|-50-[v0(100)]", views: imageView) 

} 

} 
+0

показать код, в котором вы создаете кнопку в классе контроллера –

+0

я добавил ViewController код класса – Bigair

ответ

3

Обычно нет касания на подвид вне пределов его надтаблицы.

Чтобы изменить это, вам придется переопределить hitTest(point:withEvent:) на надтаблицы, чтобы изменить способ хит-тестирования работает:

override func hitTest(point: CGPoint, withEvent e: UIEvent?) -> UIView? { 
    if let result = super.hitTest(point, withEvent:e) { 
     return result 
    } 
    for sub in self.subviews.reverse() { 
     let pt = self.convertPoint(point, toView:sub) 
     if let result = sub.hitTest(pt, withEvent:e) { 
      return result 
     } 
    } 
    return nil 
} 
+0

Это решило проблему! – Bigair

Смежные вопросы