Tôi đang sử dụng một vài công cụ nhận dạng cử chỉ trên một số chế độ xem, nhưng đôi khi lượt xem quá nhỏ và rất khó để đạt được. Sử dụng các trình nhận dạng là cần thiết, vậy làm thế nào tôi có thể phóng to khu vực hit?Làm thế nào để phóng to khu vực hit của UIGestureRecognizer?
8
A
Trả lời
19
Nếu bạn đang làm điều này cho một phong tục UIView
, bạn sẽ có thể ghi đè lên các phương pháp hitTest:withEvent:
:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
CGRect frame = CGRectInset(self.bounds, -20, -20);
return CGRectContainsPoint(frame, point) ? self : nil;
}
Đoạn mã trên sẽ thêm một biên giới 20 điểm xung quanh xem. Nhấn vào vị trí bất kỳ trong khu vực đó (hoặc trên chính chế độ xem) sẽ cho biết một lần truy cập.
0
Nếu bạn đang sử dụng một UIImageView
như một nút, bạn có thể sử dụng tiện ích sau (Swift 3.0):
extension UIImageView {
open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if self.isHidden || !self.isUserInteractionEnabled || self.alpha < 0.01 { return nil }
let minimumHitArea = CGSize(width: 50, height: 50)
let buttonSize = self.bounds.size
let widthToAdd = max(minimumHitArea.width - buttonSize.width, 0)
let heightToAdd = max(minimumHitArea.height - buttonSize.height, 0)
let largerFrame = self.bounds.insetBy(dx: -widthToAdd/2, dy: -heightToAdd/2)
// perform hit test on larger frame
return (largerFrame.contains(point)) ? self : nil
}
}
Tương tự như phần mở rộng UIButton
here
0
phiên bản Swift của câu trả lời @rmaddy:
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let frame = self.bounds.insetBy(dx: -20, dy: -20);
return frame.contains(point) ? self : nil;
}
Vì vậy, bạn đang hỏi cách phóng to chế độ xem? – Jordan
Không, tất nhiên tôi biết cách mở rộng khung hình :) Tôi cần phóng to khung hình, mà không ảnh hưởng đến khung hình thực của nó. – Tesseract