Câu trả lời:
let view = ...
let point = ...
view.bounds.contains(point)
Sử dụng CGRectContainsPoint()
:
bool CGRectContainsPoint(CGRect rect, CGPoint point);
Thông số
rect
Các hình chữ nhật để kiểm tra.point
Các điểm để kiểm tra. Giá trị trả về true nếu hình chữ nhật không rỗng hoặc rỗng và điểm nằm trong hình chữ nhật; mặt khác, saiMột điểm được xem xét bên trong hình chữ nhật nếu tọa độ của nó nằm bên trong hình chữ nhật hoặc trên cạnh X tối thiểu hoặc Y tối thiểu.
Trong Swift trông như thế này:
let point = CGPointMake(20,20)
let someFrame = CGRectMake(10,10,100,100)
let isPointInFrame = CGRectContainsPoint(someFrame, point)
Phiên bản Swift 3:
let point = CGPointMake(20,20)
let someFrame = CGRectMake(10,10,100,100)
let isPointInFrame = someFrame.contains(point)
Liên kết đến tài liệu . Hãy nhớ kiểm tra ngăn chặn nếu cả hai nằm trong cùng một hệ tọa độ nếu không thì cần phải chuyển đổi ( một số ví dụ )
Quan điểm của UIView: withEvent: có thể là một giải pháp tốt. Sẽ trả về giá trị boolean cho biết thời tiết hay không CGPoint đã cho trong trường hợp UIView bạn đang sử dụng. Thí dụ:
UIView *aView = [UIView alloc]initWithFrame:CGRectMake(0,0,100,100);
CGPoint aPoint = CGPointMake(5,5);
BOOL isPointInsideView = [aView pointInside:aPoint withEvent:nil];
Trong mục tiêu c, bạn có thể sử dụng CGRectContainsPoint (yourview.frame, touchpoint)
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch* touch = [touches anyObject];
CGPoint touchpoint = [touch locationInView:self.view];
if( CGRectContainsPoint(yourview.frame, touchpoint) ) {
}else{
}}
Trong swift 3 yourview.frame.contains (touchpoint)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch:UITouch = touches.first!
let touchpoint:CGPoint = touch.location(in: self.view)
if wheel.frame.contains(touchpoint) {
}else{
}
}
Rất đơn giản, bạn có thể sử dụng phương pháp sau để thực hiện loại công việc này: -
-(BOOL)isPoint:(CGPoint)point insideOfRect:(CGRect)rect
{
if ( CGRectContainsPoint(rect,point))
return YES;// inside
else
return NO;// outside
}
Trong trường hợp của bạn, bạn có thể vượt qua fantView.center dưới dạng điểm và một fantView.frame khác dưới dạng trực tiếp trong phương thức about.
Bạn cũng có thể sử dụng phương pháp này trong Phương pháp UITouch dưới đây :
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
}
Tôi đang bắt đầu tìm hiểu cách viết mã với Swift và cũng đang cố gắng giải quyết vấn đề này, đây là điều tôi nghĩ ra trên sân chơi của Swift:
// Code
var x = 1
var y = 2
var lowX = 1
var lowY = 1
var highX = 3
var highY = 3
if (x, y) >= (lowX, lowY) && (x, y) <= (highX, highY ) {
print("inside")
} else {
print("not inside")
}
Nó in bên trong
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self.view];
CGRect rect1 = CGRectMake(vwTable.frame.origin.x,
vwTable.frame.origin.y, vwTable.frame.size.width,
vwTable.frame.size.height);
if (CGRectContainsPoint(rect1,touchLocation))
NSLog(@"Inside");
else
NSLog(@"Outside");
}