UIImageView изображение растягивается, когда я использую закругленные углы. - PullRequest
0 голосов
/ 18 мая 2018

Я использую UITableViewCell в качестве заголовка UITableView.Я использую приведенный ниже код, чтобы сделать закругленные углы для UIImageView.

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    if(section==0){

    static NSString *simpleTableIdentifier = @"ContactDetailsHeaderTableViewCell";

    ContactDetailsHeaderTableViewCell *cell = (ContactDetailsHeaderTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];


    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ContactDetailsHeaderTableViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

    }

    ..................
    .................

UIImage *img = [UIImage imageWithContentsOfFile:getImagePath];

        //rounded corners
        cell.profilePicImgView.clipsToBounds = YES;

        UIGraphicsBeginImageContextWithOptions(cell.profilePicImgView.bounds.size, NO, 1.0);

        // Add a clip before drawing anything, in the shape of an rounded rect
        [[UIBezierPath bezierPathWithRoundedRect:cell.profilePicImgView.bounds
                                    cornerRadius:60.0] addClip];
        // Draw your image
        [img drawInRect:cell.profilePicImgView.bounds];

        // Get the image, here setting the UIImageView image
        cell.profilePicImgView.image = UIGraphicsGetImageFromCurrentImageContext();

        // end drawing
        UIGraphicsEndImageContext();


.............
.............
}

Ниже приведен вывод

enter image description here

Изображение внутриUIImageView растягивается, если я не использую закругленные углы, то изображение выглядит правильно.Я пробовал много примеров кода из StackOverflow, но ни один из них не работает.

Ответы [ 6 ]

0 голосов
/ 25 мая 2018

Разобрался с проблемой, разместив ответ, чтобы он мог помочь другим.Это не связано с закругленными углами кода.Код закругленных углов работает нормально.В UIImagePickerController я установил allowsEditing = YES, но в didFinishPickingMediaWithInfo я использовал UIImagePickerControllerOriginalImage, поэтому позже я изменил его на UIImagePickerControllerEditedImage.Теперь работает нормально.Я могу получить изображение закругленных углов без каких-либо растяжек.

-(void)capturePhoto{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
                                    picker.delegate = self;
                                    picker.allowsEditing = YES;
                                    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

                                    [self presentViewController:picker animated:YES completion:NULL];
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {


/* earlier i have used UIImagePickerControllerOriginalImage in the place of UIImagePickerControllerEditedImage so it was not working properly*/
        UIImage *chosenImage = info[UIImagePickerControllerEditedImage];

        ............
        ............





     [picker dismissViewControllerAnimated:YES completion:NULL];
}
0 голосов
/ 19 мая 2018

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

  -(UIImageView*)SetupLayoutsImg:(UIImageView*)img{

UIColor* borderColor=[UIColor colorWithRed:244.0/255.0f green:244.0/255.0f blue:244.0/255.0f alpha:1.0/1.0f];
int borderwidth=1.0f;
int bottomViewRadius=10.0f;

img.layer.cornerRadius = bottomViewRadius; // this value vary as per your desire
img.contentMode = UIViewContentModeScaleAspectFill

img.layer.borderWidth=borderwidth;
img.layer.borderColor=borderColor.CGColor;
img.clipsToBounds = YES;

   return img;
 }


 -(UIButton*)SetupLayoutsButtons:(UIButton*)Btn{

 UIColor* borderColor=[UIColor colorWithRed:244.0/255.0f green:244.0/255.0f blue:244.0/255.0f alpha:1.0/1.0f];
int borderwidth=1.0f;
int buttonRadius=25.0f;

Btn.layer.cornerRadius = buttonRadius; // this value vary as per your desire

Btn.layer.borderWidth=borderwidth;
Btn.layer.borderColor=borderColor.CGColor;
Btn.clipsToBounds = YES;

   return Btn;
 }  

Как использовать его, просто вызвав его в uitableView делегате viewForHeaderInSection, который я используюэто в cellForRowAtIndexPath вот так

tableCellinside.cateImage=[self SetupLayoutsImg:tableCellinside.cateImage];

cateImage - это мой UIImageView, вы можете использовать его вот так s

cell.profilePicImgView=[self SetupLayoutsImg:cell.profilePicImgView];
0 голосов
/ 18 мая 2018

Почему вы делаете изображение круглым?Вы должны сделать просмотр изображений круглым, и все готово.Вам не нужно ничего делать с изображением!

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

 yourImageView.layer.cornerRadius = yourImageView.frame.size.height/2;
 yourImageView.clipsToBounds = YES;
 yourImageView.contentMode = UIViewContentModeScaleAspectFill
 yourImageView.image = [UIImage imageNamed:@"yourImageHere"];

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

Во-вторых, ваш подход к созданию заголовка неверен!Вы снимаете ячейку с таблицы в viewForHeaderInSection.Это не верно!Вместо этого возьмите или создайте одно представление (как xib или вы можете добавить представление в раскадровке под основным видом) или создайте представление программно и добавьте ваше представление изображения в это представление и верните его из viewForHeaderInSection.

0 голосов
/ 18 мая 2018

Ваш UIImageView имеет фиксированный размер?Пожалуйста, проверьте это так же.Если не задан фиксированный размер, то вам нужно задать cornerRadius вашего ImageView как cell.profilePicImgView.bounds.height/2.Также попробуйте указать contentMode = AspectFill.

0 голосов
/ 18 мая 2018

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

Проблема в следующей строке ...

[[UIBezierPath bezierPathWithRoundedRect:cell.profilePicImgView.bounds
                                cornerRadius:60.0] addClip];

Вот и вынастройка cornerRadius:, если вы хотите, чтобы изображение отображалось в полной круглой форме, тогда вам нужно установить cornerRadius: на cell.profilePicImgView.bounds.height/2 или может быть .width/2.

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

cell.profilePicImgView.image = //set image here

//Make image view round shape
cell.profilePicImgView.layer.cornerRadius = cell.profilePicImgView.bounds.height/2

//clip the bounds of image view
cell.profilePicImgView.clipsToBounds = YES;
0 голосов
/ 18 мая 2018

Проблема в вашем коде в том, что вы используете dequeueReusableCellWithIdentifier для удаления заголовков.Вместо этого вы должны использовать dequeueReusableHeaderFooterViewWithIdentifier и основывать свои представления заголовков на назначенном классе UITableViewHeaderFooterView.Они являются отдельными классами и перерабатываются по-разному при навигации по представлению таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...