1、CGRectInset
CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy)是以rect为中心,根据dx和dy来实现缩小。
可以理解为,高度和宽度相对于view1分别缩小20像素。正值表示缩小,负值表示扩大。
2.CGRectOffset
CGRect CGRectOffset(CGRect rect, CGFloat dx, CGFloat dy)
它是以rect左上角为基点,向X轴和Y轴偏移dx和dy像素。
3.CGRectContainsRect
CGRectContainsRect(CGRect rect1, CGRect rect2)
判断两个结构体是否有交错
- CGRectContainsPoint
CGRectContainsRect(CGRect rect, CGPoint point)
判断一个点是否包含在矩形中,所以参数为一个点一个矩形
其中 CGSize和CGPoint的比较方法如出一辙
演练:增加按钮响应区域
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (!self.isUserInteractionEnabled || self.hidden || self.alpha<=0.01) {
return nil;
}
CGRect touchRect = CGRectInset(self.bounds, -20, -20);
if (CGRectContainsPoint(touchRect, point)) {
for (UIView *subView in [self.subviews reverseObjectEnumerator]) {
CGPoint convertedPoint = [subView convertPoint:point toView:self];
UIView *hitTestView = [subView hitTest:convertedPoint withEvent:event];
if (hitTestView) {
return hitTestView;
}
}
return self;
}
return nil;
}
UIKit提供了一下几种坐标转换的方法:
- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
- (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;
- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;
- (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;
网友评论