2013-07-22 32 views
6

Im cố gắng để vừa với hình ảnh vào uiimageview, hình ảnh được tải xuống và tải theo chế độ ăn tối và chỉ có một độ phân giải có sẵn cho ứng dụng ios và android.Điều chỉnh UIImage thành UIImageView

Vì vậy, tôi cần hình ảnh để giữ tỉ lệ và quy mô chiều rộng, tôi đặt UIImageView chế độ nội dung cho UIViewContentModeScaleAspectFill, nhưng nó tập trung hình ảnh, vì vậy nó đi ra khỏi màn hình cho cả trên và dưới, hình ảnh sẽ được thiết kế sao cho đáy là không cần thiết.

Làm cách nào để căn chỉnh hình ảnh ở góc trên cùng bên trái?

Và UIImageView cũng có thể chia tỷ lệ thành chiều rộng cho tôi không? hoặc làm thế nào tôi có thể làm điều đó?

Xin cảm ơn trước.

EDIT:

tôi đã cố gắng setcliptobounds và cắt hình ảnh kích thước ImageView, thats không vấn đề của tôi.

UIViewContentModeTopLeft hoạt động tốt, nhưng hiện tại tôi không thể áp dụng UIViewContentModeScaleAspectFill hoặc tôi có thể áp dụng cả hai không?

+0

bản sao có thể có của [UIViewContentModeScaleAspectFill not clipping] (http: // stackoverflow.com/questions/6638623/uiviewcontentmodescaleaspectfill-not-clipping) – Peres

+0

Sử dụng UIViewContentModeTopLeft – Moxy

+0

Sử dụng [imageView setClipsToBounds: YES]; –

Trả lời

9

Bạn có thể mở rộng hình ảnh cho phù hợp với chiều rộng xem hình ảnh của.

Bạn có thể sử dụng danh mục trên UIImage để tạo hình ảnh mới có chiều rộng đã chọn.

@interface UIImage (Scale) 

-(UIImage *)scaleToWidth:(CGFloat)width; 

@end 

@implementation UIImage (Scale) 

-(UIImage *)scaleToWidth:(CGFloat)width 
{ 
    UIImage *scaledImage = self; 
    if (self.size.width != width) { 
     CGFloat height = floorf(self.size.height * (width/self.size.width)); 
     CGSize size = CGSizeMake(width, height) 

     // Create an image context 
     UIGraphicsBeginImageContext(size); 

     // Draw the scaled image 
     [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)]; 

     // Create a new image from context 
     scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 

     // Pop the current context from the stack 
     UIGraphicsEndImageContext(); 
    } 
    // Return the new scaled image 
    return scaledImage; 
} 

@end 

Bằng cách này bạn có thể sử dụng nó để mở rộng hình ảnh

UIImage *scaledImage = [originalImage scaleToWidth:myImageView.frame.size.width]; 
myImageView.contentMode = UIViewContentModeTopLeft; 
myImageView.image = scaledImage; 
+0

Thats chiều rộng rộng nhưng không chiều cao, tôi cần phải duy trì tỷ lệ khung hình. – Nanoc

+0

Tôi hiểu lầm những gì bạn muốn đạt được. Tôi đã chỉnh sửa -scaleToWidth :, nó phải chính xác bây giờ – Moxy

+0

Tôi đã tự làm nhưng vẫn hữu ích, cảm ơn. – Nanoc

0

UIView là siêu lớp của UIImageView có thuộc tính contentMode. Bạn có thể sử dụng hằng số sau cho căn chỉnh trên cùng bên trái của hình ảnh của bạn.

UIViewContentModeTopLeft 

Aligns the content in the top-left corner of the view. 

Để giữ tỷ lệ Aspect

UIViewContentModeScaleAspectFit 

Scales the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent. 
+0

Nice, câu hỏi đầu tiên được giải quyết, sau đó làm cách nào tôi có thể chia tỷ lệ hình ảnh thành chiều rộng UIImageView? – Nanoc

+0

Bạn không thể thực hiện nếu bạn muốn duy trì tỷ lệ khung hình. Tại sao bạn không nhận được chiều rộng hình ảnh bằng cách thực hiện image.size.width; và sử dụng điều này để thay đổi chiều rộng của UIImageView của bạn. hơn bạn không cần phải kéo dài hình ảnh của bạn. –

+0

Ảnh sẽ lớn hơn màn hình – Nanoc

0

Bạn có thể không được cả hai class và duy trì tỉ lệ với UIImageView, Tuy nhiên có một lớp con vĩ đại của UIImageView tên UIImageViewAligned mà làm này có thể cho bạn. Bạn có thể tìm thấy dự án này trên github từ here.
Những gì bạn cần làm là như sau:

  1. copy bản đầu tiên tiêu đề và thực hiện từ UIImageViewAligned-master/UIImageViewAligned/dự án của bạn
  2. Chèn một đối tượng ImageView từ thư viện đối tượng trong IB để nhìn của bạn.
  3. Thay đổi lớp của ImageView để UIImageViewAligned trong Identity Inspector từ Utilities pane
  4. Sau đó thêm liên kết mong muốn của bạn như một con đường quan trọng trong User Defined Runtime phần Thuộc tính tổng danh tính Inspector

Vậy là xong. Chạy dự án của bạn để đảm bảo dự án.

+0

Tất nhiên tôi có thể, câu trả lời Moxy hoạt động hoàn hảo. – Nanoc

Các vấn đề liên quan