我以前做过这件事,但由于某种原因它没有工作。我试图在我的tableview中找到圆形图片,除了一件事,一切正常:
图片尺寸不一样,因此四舍五入不能正常工作,有些照片太荒谬了。
我使用下面的代码。
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
cell.imageView.layer.masksToBounds = YES;
cell.imageView.clipsToBounds = YES;;
cell.imageView.layer.cornerRadius = cell.imageView.layer.frame.size.width/2;
//Getting the picture data of the current contact
NSData *pictureData = [[[[dataArray objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]picture]data];
UIImage *picture;
//Setting the picture or a placeholder if none was found
if (pictureData == nil || pictureData.length < 15){
picture = [UIImage imageNamed:@"placeholder.png"];
}else{
picture = [UIImage imageWithData:pictureData];
}
cell.textLabel.text = [[[dataArray objectAtIndex:indexPath.section]objectAtIndex:indexPath.row]compositeName];
cell.imageView.image = picture;
return cell;
考虑到一些图像视图(显然......)具有不同的尺寸,我应该怎样做以保持圆形图像。
请注意,tableview单元格和图像都具有相同的高度/宽度,它们只是得到一个不超过其高度一半的cornerradius值,但它们仍然不会更宽或更高。
答案 0 :(得分:0)
在将UIImage添加到UIImageView之前,我建议您将图像大小调整为正确的大小(UIImageView的大小)。
这样,图像将被舍入,滚动时的性能会更好。
要调整图像大小,您可以使用以下方法:
- (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
CGSize scaledSize = newSize;
float scaleFactor = 1.0;
if( image.size.width > image.size.height ) {
scaleFactor = image.size.width / image.size.height;
scaledSize.width = newSize.width;
scaledSize.height = newSize.height / scaleFactor;
}
else {
scaleFactor = image.size.height / image.size.width;
scaledSize.height = newSize.height;
scaledSize.width = newSize.width / scaleFactor;
}
UIGraphicsBeginImageContextWithOptions( scaledSize, NO, 0.0 );
CGRect scaledImageRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
[image drawInRect:scaledImageRect];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
并像这样使用它:
cell.imageView.image = [self scaleImage:picture toSize:CGSizeMake(width, height)];