2009-09-28 39 views
6

Tôi có nhiều png với kích thước khác nhau và tôi muốn tải chúng vào một bảng. Tôi có mã này:Hình ảnh ở giữa bị mờ

charImage.image = [self imageForId:g.charId glyphNr:g.glyphNr]; 
[charImage sizeToFit]; 
//charImage.contentMode = UIViewContentModeCenter; 
charImage.center = CGPointMake(30, 23); 

Mọi thứ hoạt động tốt ngoại trừ png của tôi bị mờ. Nếu tôi không tập trung chúng, cực kỳ sắc nét. Tất cả chúng đều được làm từ những đường cong. Tôi đã không xuất khẩu tất cả, vì vậy vẫn là một cơ hội để xuất khẩu với một kích thước cố định và các bản vẽ đã được trung tâm, nhưng tôi muốn biết nếu tôi đang làm một cái gì đó sai hoặc không đầy đủ. Tại sao chúng bị mờ?

tôi nghĩ là không thể tải lên bất kỳ hình ảnh ở đây ..

Trả lời

10

này sẽ đảm bảo khung là số nguyên tọa độ:

int centerX = 30; 
int centerY = 23; 
CGSize size = charImage.frame.size; 
charImage.frame = CGRectMake((int)(centerX - size.width/2), 
          (int)(centerY - size.height/2), 
          size.width, size.height); 

Sự khác biệt giữa điều này và

charImage.center = CGPointMake(30, 23); 

.center setter cou ld đặt nguồn gốc thành một điểm không phải số nguyên khi một trong hai chiều rộng hoặc chiều cao có độ chẵn sai. Như những người khác đã nói ở đây, hình ảnh và văn bản trông mờ khi chúng ở tọa độ không phải nguyên.

+0

Hoàn hảo, cảm ơn bạn rất nhiều. –

+1

Lưu ý rằng điều này cũng xảy ra khi kích thước hình ảnh của bạn không phải là "thậm chí" ở cả chiều cao hoặc chiều rộng (ví dụ: kích thước 301x199). Trong trường hợp đó, việc sử dụng UIViewContentModeCenter có thể làm mờ hình ảnh của bạn ngay cả khi không sử dụng trung tâm. –

1

bạn có thể sử dụng tính phối thay vì contentMode:

charImage.frame = CGRectMake(x,y,width,height)

+0

bạn có thể giúp tôi tính toán một số giá trị cố định không? điều này tương đương với thuộc tính trung tâm nhưng chúng vẫn không phải là giá trị cố định, tôi không biết làm thế nào, các giới hạn là 46x46px: charImage.frame = CGRectMake ((46- [giới hạn charImage] .size.width)/2 , (46- [charImage bounds] .size.height)/2, [giới hạn charImage] .size.width, [charImage bounds] .size.height); –

+0

Tôi nghĩ rằng đó là ok để thay đổi chỉ vị trí, không phải để tính toán một khung hình mới, phải không? Nhưng không chắc chắn tài sản là gì. –

4

Điều này xảy ra bởi vì pngs được đặt tại các vị trí sub-pixel . Sử dụng sizeToFit cùng với UIViewContentModeCenter làm cho điều này xảy ra. Khi bạn không sử dụng UIViewContentModeCenter, các khung nhìn được đặt tại (0.0, 0.0), và do đó không làm mờ.

Nếu bạn muốn tránh mờ, lần đầu tiên không sử dụng sizeToFit, sau đó sử dụng để tập trung hình ảnh:

image.frame = CGRectMake(round(centerX - image.frame.size.width/2.0), 
         round(centerY - image.frame.size.height/2.0), 
         image.frame.size.width, 
         image.frame.size.height); 
+0

Khi tôi hiểu sizeToFit làm cho UIImageView của tôi có kích thước của UIImage, do đó contentMode ở đây không có hiệu lực, đó là lý do tại sao tôi nhận xét nó. tôi không thể xử lý các tỷ lệ của UIImageView vì vậy tôi thích trung tâm trực tiếp UIImageView. charImage là một UIImageView –

+0

Bạn nói đúng: bạn không cần đặt chế độ nội dung. Nhưng nếu bạn sizeToFit, hình ảnh có thể bị kéo dài, và điều đó có thể làm cho hình ảnh bị mờ. Xem câu trả lời được cập nhật. – Felixyz

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