UIButton 클릭 확대
해결 방법
신축분류, 재작성버튼의 유효한 클릭 영역 변경
코드
UIButton+HLClickRange.h
typedef struct HLClickEdgeInsets {
CGFloat top,left,bottom,right;
} HLClickEdgeInsets;
UIKIT_STATIC_INLINE HLClickEdgeInsets HLClickEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
HLClickEdgeInsets clickEdgeInsets = {top, left, bottom, right};
return clickEdgeInsets;
}
@interface UIButton (HLClickRange)
/**
button
length: ( )
*/
- (void)hlChangeButtonClickLength:(CGFloat)length;
/**
button
edgeInsets:
*/
- (void)hlChangeButtonClickRange:(HLClickEdgeInsets)edgeInsets;
@end
UIButton+HLClickRange.m
#import "UIButton+HLClickRange.h"
#import
static char hlTopKey;
static char hlLeftKey;
static char hlBottomKey;
static char hlRightKey;
@implementation UIButton (HLClickRange)
- (void)hlChangeButtonClickLength:(CGFloat)length{
[self hlChangeButtonClickRange:HLClickEdgeInsetsMake(length, length, length, length)];
}
- (void)hlChangeButtonClickRange:(HLClickEdgeInsets)edgeInsets{
objc_setAssociatedObject(self, &hlTopKey, [NSNumber numberWithFloat:edgeInsets.top], OBJC_ASSOCIATION_COPY_NONATOMIC);
objc_setAssociatedObject(self, &hlLeftKey, [NSNumber numberWithFloat:edgeInsets.left], OBJC_ASSOCIATION_COPY_NONATOMIC);
objc_setAssociatedObject(self, &hlBottomKey, [NSNumber numberWithFloat:edgeInsets.bottom], OBJC_ASSOCIATION_COPY_NONATOMIC);
objc_setAssociatedObject(self, &hlRightKey, [NSNumber numberWithFloat:edgeInsets.right], OBJC_ASSOCIATION_COPY_NONATOMIC);
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
CGRect rect = [self enlargedRect];
if (CGRectEqualToRect(rect, self.bounds))
{
return [super hitTest:point withEvent:event];
}
return CGRectContainsPoint(rect, point) ? self : nil;
}
- (CGRect)enlargedRect
{
NSNumber *topEdge = objc_getAssociatedObject(self, &hlTopKey);
NSNumber *leftEdge = objc_getAssociatedObject(self, &hlLeftKey);
NSNumber *bottomEdge = objc_getAssociatedObject(self, &hlBottomKey);
NSNumber *rightEdge = objc_getAssociatedObject(self, &hlRightKey);
if (topEdge && rightEdge && bottomEdge && leftEdge){
return CGRectMake(self.bounds.origin.x - leftEdge.floatValue,
self.bounds.origin.y - topEdge.floatValue,
self.bounds.size.width + leftEdge.floatValue + rightEdge.floatValue,
self.bounds.size.height + topEdge.floatValue + bottomEdge.floatValue);
}else{
return self.bounds;
}
}
@end
데모 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.