Выборочные закругления углов в представлении изображения — iOS

Я работаю в Xcode версии 6.1.1 и iOS 8.1 для разработки своего приложения, в котором мне нужны круглые верхние левые и верхние правые углы в представлении изображения в соответствии с дизайном.

Раньше я использовал следующий код, и он правильно работает в предыдущих версиях Xcode:

UIImageView *locationImage = (UIImageView *)[cell viewWithTag:101];

UIBezierPath *maskPath1;

maskPath1 = [UIBezierPath bezierPathWithRoundedRect:locationImage.bounds
                                  byRoundingCorners:(UIRectCornerTopRight | UIRectCornerTopLeft)
                                        cornerRadii:CGSizeMake(5.0, 5.0)];
CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init];
maskLayer1.frame = locationImage.bounds;
maskLayer1.path = maskPath1.CGPath;
locationImage.layer.mask = maskLayer1;

Теперь я закругляю верхний левый угол, но не правый. Я знаю, что код правильный, потому что, если я применю его к представлению изображения без ограничений, он будет работать хорошо, но мне нужно ограничить элементы представлением. Я использую автоматическую раскладку.

ссылка на изображение: https://www.dropbox.com/s/orisd8gzbdhsr4z/round-corners.tiff?dl=0

Что-то я делаю не так? Как правильно закруглить два угла?

заранее спасибо

*Извините за мой английский


person cmacera    schedule 24.02.2015    source источник
comment
возможный дубликат Round некоторые углы UIView, а также вокруг границы слоя представления   -  person Paresh Navadiya    schedule 24.02.2015
comment
Спасибо за ваше предложение, но в соответствующем посте используется тот же код для закругления углов, просто добавьте обводку (которая мне не нужна) и работает так же: просто закругляет верхний левый угол.   -  person cmacera    schedule 24.02.2015


Ответы (2)


@jcmartinac,

вы можете использовать это решение - как установить angleRadius только для верхнего левого и верхнего правого угла UIView?

в вашем коде примените этот код, я проверил, он отлично работает.

maskPath1 = (UIImageView *)[self roundCornersOnView: maskPath1 onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0];

//используйте приведенный ниже метод для установки углового радиуса скругления..

-(UIView *)roundCornersOnView:(UIView *)view onTopLeft:(BOOL)tl topRight:(BOOL)tr bottomLeft:(BOOL)bl bottomRight:(BOOL)br radius:(float)radius {

    if (tl || tr || bl || br) {
        UIRectCorner corner = 0; //holds the corner
        //Determine which corner(s) should be changed
        if (tl) {
            corner = corner | UIRectCornerTopLeft;
        }
        if (tr) {
            corner = corner | UIRectCornerTopRight;
        }
        if (bl) {
            corner = corner | UIRectCornerBottomLeft;
        }
        if (br) {
            corner = corner | UIRectCornerBottomRight;
        }

        UIView *roundedView = view;
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:roundedView.bounds byRoundingCorners:corner cornerRadii:CGSizeMake(radius, radius)];
        CAShapeLayer *maskLayer = [CAShapeLayer layer];
        maskLayer.frame = roundedView.bounds;
        maskLayer.path = maskPath.CGPath;
        roundedView.layer.mask = maskLayer;
        return roundedView;
    } else {
        return view;
    }

}

///////////// Для TableView используйте приведенный ниже код в методе cellForRowAtIndexPath /////

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.Img_thumb=(UIImageView *)[self roundCornersOnView: cell.Img_thumb onTopLeft:YES topRight:YES bottomLeft:NO bottomRight:NO radius:20.0];
}

Проверьте снимок экрана:-> Эффект на столе

person Mehul    schedule 24.02.2015
comment
Спасибо за помощь! К сожалению, раньше он работал так же... Тестируя код, я понял, что работает только верхний левый угол, если я попытаюсь закруглить любой другой, он ничего не сделает. я совсем потерялся - person cmacera; 24.02.2015
comment
Я видел, как ваш код работает внутри uiviewcontroller, но я использую uitableviewcontroller, и это когда он не работает. Вы пробовали это в uiimageview внутри ячейки в uitableview? Думаю проблема в uitableview - person cmacera; 25.02.2015
comment
Да, в UITableView все работает. - person Mehul; 26.02.2015
comment
@jcmartinac, я обновил свой код, вы можете это увидеть. - person Mehul; 26.02.2015
comment
Здравствуйте и еще раз спасибо! Я продолжаю искать решения и решил прикрепить простой проект, чтобы ясно увидеть мою проблему, закруглив верхние углы UIImageView, который занимает всю ширину ячейки в таблице. Когда я применяю код для этого, изображение теряет ширину экрана и у меня это не работает. С этим примером я надеюсь, что кто-то может мне помочь. dropbox.com/s/w9i3ye2wb2ck0ef/roundcorners.zip?dl=0< /а> - person cmacera; 26.02.2015
comment
Я загрузил ваш код, а также попытался решить вашу ОШИБКУ, но я не могу создать правую сторону ДВУХ угловых скруглений.... я думаю, вам нужен совет эксперта .. я делаю все возможное. :) - person Mehul; 26.02.2015
comment
@jcmartinac, если вы найдете полезным, пожалуйста, проголосуйте за ответ +1. - person Mehul; 29.06.2015

Наконец, я нашел решение, вставляющее uiimageview в uiview с угловым радиусом, установленным в определяемых пользователем атрибутах времени выполнения, и устанавливая для cliptobounds этого uiview значение yes.

Если кому-то нужны дополнительные объяснения, я дам в восторге

person cmacera    schedule 27.02.2015