서브 클래 싱 대신 UIImageView 및 CALayer의 간단한 카테고리를 통해 더 강력한 기능을 얻을 수 있습니다.
다음과 같이 UIImageView에 범주를 만듭니다.
- (void)maskRoundCorners:(UIRectCorner)corners radius:(CGFloat)radius {
if ( corners == UIRectCornerAllCorners ) {
self.layer.cornerRadius = radius;
self.layer.masksToBounds = YES;
} else {
self.layer.mask = [CALayer maskLayerWithCorners:corners radii:CGSizeMake(radius, radius) frame:self.bounds];
}
}
CALayer에서 카테고리 메소드를 호출합니다.
+ (id)maskLayerWithCorners:(UIRectCorner)corners radii:(CGSize)radii frame:(CGRect)frame {
CAShapeLayer *mask = [CAShapeLayer layer];
mask.frame = frame;
mask.path = [UIBezierPath bezierPathWithRoundedRect:mask.bounds byRoundingCorners:corners cornerRadii:radii].CGPath;
mask.fillColor = [UIColor whiteColor].CGColor;
return mask;
}
따라서 UIRectCorner
모서리의 모든 조합 (참조 ) 을 둥글게 할 수 있습니다 UITableView
. 그룹 스타일에 이미지를 넣을 때 특히 유용합니다 . 그러나이 작업을 수행 할 때 한 가지주의 사항이 있습니다. 서브 클래 싱하지 않았기 때문에에 UIImageView
코드를 삽입 할 수 없습니다. layoutSubviews
즉, 마스크 레이어가 올바르지 않을 수 있습니다. 실제로 셀을 구성 할 때 category 메서드를 호출 할 때 이미지보기의 경계가 설정되지 않습니다. 따라서 둥근 모서리를 추가하기 전에 이미지 뷰의 경계가 설정되었는지 확인해야합니다 (를 사용하는 경우 제외 UIRectCornersAllCorners
).
다음은이를 수행하는 코드입니다.
UIRectCorner corners = !UIRectCornerAllCorners;
if (indexPath.row == 0)
corners = UIRectCornerTopLeft;
if (indexPath.row == numberOfRowsInTheTable)
corners |= UIRectCornerBottomLeft;
if (corners > 0) {
cell.imageView.bounds = CGRectMake(0.f, 0.f, [self.tableView rowHeight], [self.tableView rowHeight]);
[cell.imageView maskRoundCorners:corners radius:10.f];
} else {
[cell.imageView removeRoundCornersMask];
}
둥근 모서리를 제거하는 또 다른 범주가 있습니다. 모든 작업은 마스크를 제거하고 cornerRadius
를 0으로 설정하는 것입니다.