2014-11-30 4 views
0

Я хочу сделать округленное фото из Facebook, но изображение всегда масштабируется.Сделайте округленное изображение с раскадровки

Так я Раскадровка со следующими параметрами: http://prntscr.com/5bpuqy

Align центр X, Y центра выравнивания, ширина равна 72, высота равна 72. Я понимаю, что проблема может быть в 72/72, но режим изображения в раскадровке «Aspect Fit»

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

// call 
[UIImage setRoundImageView:self.p_photo WithURL:[p_user fullURL] withCornerSize:37]; 

+ (void)setRoundImageView:(UIImageView *)imageView WithURL:(NSURL *)url withCornerSize:(CGFloat)corner 
    { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ 

     [[SDWebImageManager sharedManager] downloadImageWithURL:url 
                 options:0 
                 progress:^(NSInteger receivedSize, NSInteger expectedSize) { 

                 } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 

                  if (image && finished) 
                  { 
                   [self setRoundImage:image forImageView:imageView withCornerSize:corner]; 
                  } 
                 }]; 
    }); 
} 

+ (void)setRoundImage:(UIImage *)image forImageView:(UIImageView *)imageView withCornerSize:(CGFloat)corner 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 

     UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, [UIScreen mainScreen].scale); 
     [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds 
            cornerRadius:corner] addClip]; 
     [image drawInRect:imageView.bounds]; 
     imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    }); 
} 
+0

Чтобы обойти углы вашего изображения, используйте ответ из этого вопроса: http://stackoverflow.com/questions/1509547/uiview-with-rounded-corners –

+0

Он округлен, хорошо, все проблемы, это изображение выглядит scaled –

+0

Используйте ответ в этом вопросе SO для округления обзора, посмотрите, исправляет ли он проблему масштабирования. –

ответ

1

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

+ (void)setRoundImageView:(UIImageView *)imageView WithURL:(NSURL *)url 
{ 
    // you don't need to wrap this in a dispatch queue, SDWebImageManager takes care of that for you. 
    [[SDWebImageManager sharedManager] downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) { 
    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { 
     if (image && finished) { 
      [self setRoundImage:image forImageView:imageView]; 
     } 
    }]; 
} 

+ (void)setRoundImage:(UIImage *)image forImageView:(UIImageView *)imageView 
{ 
    // you don't need to wrap this in a dispatch queue, it will be called on the main thread. 
    // you don't need to manually draw the image into the image view. Just add the image to the image view and let it do its thing. 
    imageView.layer.cornerRadius = CGRectGetHeight(imageView.bounds)/2; 
    imageView.layer.masksToBounds = YES; 
    [imageView setImage:image]; 
} 

И убедитесь, что вид изображения установлен в положение «Аспект Fill» режим в раскадровке.

+0

Это помогло мне, но существует еще одна проблема. Когда я вызываю этот метод дважды, так что в первый раз угол радиуса 35, а во второй раз это 70. Я думаю, что это из-за SDWebImageCache? Как решить эту проблему, я могу повторно использовать ее из кеша? –

+0

Единственный путь cornerRadius будет отличаться, если размер изображенияView отличается. Либо вы меняете размер изображения, либо просматриваете другое изображение. Значение cornerRadius не имеет ничего общего с SDWebImageCache. –

+0

все в порядке, спасибо, проблема из-за метода viewWilLAppear, есть неправильные значения в viewWillAppear: и правильно в viewDidAppear: –

Смежные вопросы