2014-01-26 3 views
1

Я пытаюсь создать приложение с изображениями в закругленном изображении, но с изображениями разных и разных размеров. Моя цель - показать небольшой фрагмент изображения, если изображение слишком велико (изображение не искажено).UITableViewCell rounded imageView

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

UIImage with rounded corners

Using cornerRadius on a UIImageView in a UITableViewCell

Некоторые из моего кода здесь для UITableViewCell (который я наследник):

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
//  [self.imageView setContentMode:UIViewContentModeScaleAspectFill]; 

     self.imageView.contentMode = UIViewContentModeScaleAspectFit; 
     self.imageView.bounds = CGRectMake(0, 0, 44,44); 
     self.imageView.frame = CGRectMake(5, 10, 44, 44); 

     CGRect frame = self.imageView.frame; 
     self.imageView.layer.cornerRadius = 15; 
     [self.imageView.layer setMasksToBounds:YES]; 
     self.imageView.clipsToBounds = YES; 
    } 
    return self; 
} 

Я использую SDWebImage для загрузки образ. Есть ли что-то еще, что я здесь отсутствует?

+0

Возможный дубликат [iOS закругленный угол UIImage с рамкой] (http://stackoverflow.com/questions/17959931/ios-rounded-corner-uiimage-with-border) – Pavan

ответ

0

Я нашел решение моей проблемы.

По какой-то странной причине ... Я не мог использовать разнообразные изображения для imageView на UITableViewCell. Я закончил тем, что разместил образ заполнителя в imageView (прозрачный png), а затем я поставил свой собственный UIImageView с тем же кодом в моем вопросе, и он отлично работал. Что-то странное делается с тем, как вычисляется imageView.

1

Если вы сделаете фигуру радиуса угла пропорциональной ширине или высоте и т. Д., Это даст вам постоянную округлость для изображения. В качестве примера я предложил div на 3.

self.imageview.layer.cornerRadius = self.imageview.frame.size.width/3; 

Надеюсь, это то, что вы ищете.

Cheers, Джим

EDIT -

Я вижу, вы закомментировал aspectFill, хотя это с ClipToBounds или MaskToBounds должен обеспечить то, что вы ищете. так путем изменения

self.imageView.contentMode = UIViewContentModeScaleAspectFit; 

Изменения в

self.imageView.contentMode = UIViewContentModeScaleAspectFill; 

и держать линию self.image.clipToBounds, это должно быть.

Приветствия

+0

Кажется не работает. Моя проблема заключается в том, что с разными размерами для изображений я хочу, чтобы она не искажала изображение и всегда делала именно это. – KVISH

0

Привет это лучшее решение, и очень быстро:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     CALayer * l = [self layer]; 
     [l setMasksToBounds:YES]; 
     [l setCornerRadius:10.0]; 

     // You can even add a border 
     [l setBorderWidth:self.frame.size.width/IMG_PROFILE_BORDER_SCALE]; 
     [l setBorderColor:[[UIColor grayColor] CGColor]]; 
    } 
    return self; 
} 

И, очевидно, не забудьте импортировать рамки QuartzCore:

#import <QuartzCore/QuartzCore.h> 

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

GBPathImageView

0

UIViewContentModeScaleAspectFill лучше подходит для ваших потребностей, потому что масштабирует изображение заполнить на размер ImageView без изменения apsect.

, но не забудьте установить clipsToBounds в YES для ImageView для того, чтобы удалить оставшиеся части из видовых границ:

[self.imageView setClipsToBounds:YES]; 
Смежные вопросы