Вопрос

Я хотел бы добавить некоторые округлые углы на все UiimageViews в моем проекте. У меня уже есть код работы, но мне применим его к каждому изображению; Должен ли я подкласс 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, что означает, что слой маски может быть не правильным. Фактически, при настройке ячеек, границы изображения изображения даже не будут установлены при вызове метода категории. Следовательно, вам необходимо убедиться, что границы изображения изображения установлены перед добавлением закругленных углов (за исключением случаев использования 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. Метод круглых углов будет работать на подклассах. (не забудьте импортировать кварцкор)

-(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];

Это может помочь вам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top