Tôi đang phát triển một ứng dụng iOS 4.UIImageView, setClipsToBounds và cách hình ảnh của tôi bị mất đầu
Tôi đang sử dụng mã này vào một UIImageView
trên một UITableViewCell
:
cell.photo.contentMode = UIViewContentModeScaleAspectFill;
[cell.photo setClipsToBounds:YES];
hình ảnh của tôi là cao hơn nhiều, và khi tôi đặt UIViewContentModeScaleAspectFill
, hình ảnh được thu nhỏ để phù hợp với chiều rộng với chiều rộng UIImageView. Làm như vậy, hình ảnh càng lớn hơn UIImageView và tôi thấy nó ở bên ngoài UIImageView
.
Sau đó, tôi cần sử dụng setClipsToBounds:YES
để không cho phép điều này, nhưng giờ đây tất cả hình ảnh của tôi đều bị mất đầu.
Có cách nào để sử dụng UIViewContentModeScaleAspectFill và góc trái trên cùng bên trái của hình ảnh với góc trên cùng bên trái UIImageView
không? Nếu tôi cần phải mất một phần của hình ảnh, tôi thích để mất chân của nó rằng đầu của nó.
CẬP NHẬT
Tôi đang sử dụng sdWebImage khuôn khổ và tôi đã sử dụng Vadim Yelagin câu trả lời và đây là mã của tôi bây giờ là:
[cell.photo setImageWithURL:[NSURL URLWithString:entry.photo]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
success:^(UIImage *image) {
CGFloat scaleX = cell.photoBorder.bounds.size.width/image.size.width;
CGFloat scaleY = cell.photoBorder.bounds.size.height/image.size.height;
CGFloat scale = MAX(scaleX, scaleY);
cell.photo.frame = CGRectMake(0, 0, image.size.width * scale, image.size.height * scale);
cell.photo.image = image;
}
failure:nil];
tôi phải chờ đợi để có được tất cả các hình ảnh được nạp và tải lại di chuyển xung quanh UITableView để xem hình ảnh bên phải trên ô bên phải (điều này là do hình ảnh được lưu trữ và tải nhanh hơn).
Thay vì sử dụng cell.photo.frame
và cell.photo.image
Tôi cần chuyển đến chặn indexPath.row
để nhận ô phù hợp.
tôi có thể thêm một phương pháp mới để UIImageView + WebCache:
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(void (^)(UIImage *image, NSInteger row))success failure:(void (^)(NSError *error))failure;
{
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
}
Nhưng nếu tôi làm điều đó, tôi nhận được một lỗi ở đây:
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
Bởi vì bây giờ thành công không phải là loại (void (^)(UIImage *image))
Bạn có biết cách khắc phục sự cố này không?
Cảm ơn, nhưng tôi không hiểu code của bạn, xin lỗi. – VansFannel
Bạn tạo ngữ cảnh hình ảnh bằng cách sử dụng 'UIGraphicsBeginImageContext' và sau đó vẽ hình ảnh gốc được phóng to để nó lấp đầy toàn bộ ngữ cảnh nhưng phía trên cùng bên trái của hình ảnh ở (0 | 0). –