[ios] 모든 UIImageView에 둥근 모서리 추가

내 프로젝트의 모든 UIImageView에 둥근 모서리를 추가하고 싶습니다. 이미 코드가 작동하고 있지만 모든 이미지에 적용해야합니다. 이것을 추가하려면 UIImageView를 하위 클래스로 만들어야합니까? 그렇다면 누군가가 이것을 수행하는 방법에 대한 몇 가지 지침을 줄 수 있습니까?

다음은 코드입니다.

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *mainpath = [[NSBundle mainBundle] bundlePath];
    welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
    welcomeImageView.layer.cornerRadius = 9.0;
    welcomeImageView.layer.masksToBounds = YES;
    welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
    welcomeImageView.layer.borderWidth = 3.0;
    CGRect frame = welcomeImageView.frame;
    frame.size.width = 100;
    frame.size.height = 100;
    welcomeImageView.frame = frame;
}



답변

클래스를 하위 클래스로 만드는 대체 방법 인 UIImage에 대한 카테고리를 사용할 수 있으며 때로는 작은 변경에 더 쉽게 적용 할 수 있습니다.

예를 들어 둥근 모서리 속성이 설정된 UIImage를 반환하는 메서드를 추가합니다.

+(UIImage *)imageWithContentsOfFile:(NSString *)file cornerRadius:(NSInteger)...

Objective-c 카테고리에 대한 자세한 정보는 http://macdevelopertips.com/objective-c/objective-c-categories.html 에서 찾을 수 있습니다 .


답변

이것을 확인하십시오
-UIImage의 둥근 모서리

레이어 수정이 가장 좋은 방법 인 것 같습니다.

UIImageView * roundedView = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"wood.jpg"]];
// Get the Layer of any view
CALayer * l = [roundedView layer];
[l setMasksToBounds:YES];
[l setCornerRadius:10.0];


답변

서브 클래 싱 대신 UIImageView 및 CALayer의 간단한 카테고리를 통해 더 강력한 기능을 얻을 수 있습니다.

다음과 같이 UIImageView에 범주를 만듭니다.

- (void)maskRoundCorners:(UIRectCorner)corners radius:(CGFloat)radius {
    // To round all corners, we can just set the radius on the layer
    if ( corners == UIRectCornerAllCorners ) {
        self.layer.cornerRadius = radius;
        self.layer.masksToBounds = YES;
    } else {
        // If we want to choose which corners we want to mask then
        // it is necessary to create a mask layer.
        self.layer.mask = [CALayer maskLayerWithCorners:corners radii:CGSizeMake(radius, radius) frame:self.bounds];
    }
}

CALayer에서 카테고리 메소드를 호출합니다.

+ (id)maskLayerWithCorners:(UIRectCorner)corners radii:(CGSize)radii frame:(CGRect)frame {

    // Create a CAShapeLayer
    CAShapeLayer *mask = [CAShapeLayer layer];

    // Set the frame
    mask.frame = frame;

    // Set the CGPath from a UIBezierPath
    mask.path = [UIBezierPath bezierPathWithRoundedRect:mask.bounds byRoundingCorners:corners cornerRadii:radii].CGPath;

    // Set the fill color
    mask.fillColor = [UIColor whiteColor].CGColor;

    return mask;
}

따라서 UIRectCorner모서리의 모든 조합 (참조 ) 을 둥글게 할 수 있습니다 UITableView. 그룹 스타일에 이미지를 넣을 때 특히 유용합니다 . 그러나이 작업을 수행 할 때 한 가지주의 사항이 있습니다. 서브 클래 싱하지 않았기 때문에에 UIImageView코드를 삽입 할 수 없습니다. layoutSubviews즉, 마스크 레이어가 올바르지 않을 수 있습니다. 실제로 셀을 구성 할 때 category 메서드를 호출 할 때 이미지보기의 경계가 설정되지 않습니다. 따라서 둥근 모서리를 추가하기 전에 이미지 뷰의 경계가 설정되었는지 확인해야합니다 (를 사용하는 경우 제외 UIRectCornersAllCorners).

다음은이를 수행하는 코드입니다.

        // Perform corner rounding
        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으로 설정하는 것입니다.


답변

예, UIImageView를 하위 클래스로 만들고 프로젝트 전체에서 사용자 정의 하위 클래스를 사용해야합니다.


답변

UIImageView를 하위 클래스로 만들 수 있으며 setNeedsDisplay 메서드 를 구현 하면 둥근 모서리가 하위 클래스에서 작동합니다. (QuartzCore를 가져 오는 것을 잊지 마십시오)

-(void)setNeedsDisplay {
    self.layer.cornerRadius = 5;
    self.layer.masksToBounds = YES;
    [self.layer setBorderColor:[[UIColor whiteColor] CGColor]];
    [self.layer setBorderWidth: 2.0];
}


답변

이 시도,

coverImage.image = [UIImage imageWithContentsOfFile:@"coverImage.png"]; 
coverImage.layer.masksToBounds = YES;
coverImage.layer.cornerRadius = 10.0;
coverImage.layer.borderWidth = 1.0;
coverImage.layer.borderColor = [[UIColor brown] CGColor];

이것은 당신을 도울 수 있습니다.


답변