Как получить гладкий угловой радиус на неквадратном Objective C UIImageView - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь получить хороший круглый угол на UIImageView. Я нашел реализованный следующий код, который отлично работает, если изображение является квадратом. Проблема в том, что мой imageView - это прямоугольная фотография, иногда портретная, иногда пейзажная. Этот код обрезает углы, но не дает плавного изгиба, когда одна сторона изображения длиннее другой. Есть идеи? Также применяется ли значение с плавающей точкой в ​​setCornerRadius к изображению в виде процента сторон или просто числа пикселей?

    // Get the Layer of any view
    CALayer * l = [imageView layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:100.0];

Это исправление для всех заинтересованных лиц.

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

- (CGRect)getScaleForFrameFromImage:(UIImage *)image
{
    // get the bigger side of image to determine the shape then
    // get the percentage we need to scale to to trim imageViewFrame 
    // so it fits image and sits in the space dedicated in main view for the image
    float percentage;
    float newWidth;
    float newHeight;

    float w = image.size.width;
    float h = image.size.height;
    if (w > h) {
        // landscape
        percentage  = 280 / w;
        newWidth = w * percentage;
        newHeight = h * percentage;;
    }
    else {
        percentage  = 208 / h;
        newWidth = w * percentage;
        newHeight = h * percentage;
    }
    int xOrigin = 20 + (280 - newWidth) / 2;
    CGRect newFrame = CGRectMake(xOrigin, 160, newWidth, newHeight);
    return newFrame;
}

тогда, на мой взгляд, WillAppear я сделал это

    // set the imageFrame size
    [imageView setFrame:[self getScaleForFrameFromImage:imageToDisplay]];

    // Use that image to put on the screen in imageView
    [imageView setImage:imageToDisplay];

    // Get the Layer of imageView
    CALayer * l = [imageView layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:10.0];

1 Ответ

2 голосов
/ 22 марта 2012

Я рекомендую нарисовать imageView с размером изображения, а затем применить угловой радиус.

Это было бы что-то вроде этого.

// get the size of the image.
CGSize *size = yourImage.size;

// use the size to set the uiimageview frame
UIImageView * imageView = [UIImageView alloc] initWithFrame:CGRecMake(0,0,size.widht,size.height)];
 [imageView setImage:yourImage];
//
CALayer * l = [imageView layer];
[l setMasksToBounds:YES];
[l setCornerRadius:100.0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...