2010-05-27 31 views
9
UIImage *aImage = [[UIImage imageNamed:@"Gray_Button.png"] stretchableImageWithLeftCapWidth:25 topCapHeight:0]; 

Cố gắng tạo một "nút chai thủy tinh".iPhone có thể kéo giãnImageWithLeftCapWidth chỉ làm cho "D" s

"Stretch" làm gì nếu hình ảnh lớn hơn ... và nút tôi đang cố gắng sử dụng nó trên ... nhỏ hơn?

Hình ảnh có 'giãn' và 'thu nhỏ' không?

Lý do tôi hỏi ... là vì tất cả hình ảnh của tôi trông giống như hình chữ "D".

Phía bên trái là bình phương ... và bên phải được làm tròn.

Hình chữ D sẽ cho bạn biết rằng tôi đang làm gì sai? Quá nhiều .. hoặc quá ít ... "thiết lập leftCap"? Ảnh quá lớn?

Trả lời

54

Hình ảnh có thể kéo dài được chia thành 9 phần, nếu cả hai leftCapWidth và không đồng đều.

 leftCapWidth 
     <-----> 
     +--------------+^
     |  | |  | | 
     | A | | B | | topCapHeight 
     |-----+·+------| v 
     |-----+·+------| 
     | C | | D | 
     |  | |  | 
     +--------------+ 

Các bộ phận trung tâm luôn 1 px về kích thước, và đây là phần mà được kéo dài, ví dụ:

 leftCapWidth (constant!) 
     <-----> 
     +------------------+^
     |  |  |  | | 
     | A |  | B | | topCapHeight (constant!) 
    v |-----+ - - +------| v 
    | |  .  .  | 
    | |  .  .  | 
    ^|-----+ - - +------| 
     | C |  | D | 
     |  |  |  | 
     +------------------+ 
      >-----< 
     stretched region 

Để tạo một "nút thuốc thủy tinh", bạn nên điền vào tròn biên giới vào các khu vực A, B, C và D ở trên, và cung cấp bán kính của viên thuốc đó vào cả leftCapWidth và .


Ngoài ra, hình ảnh có thể kéo dài là không co ngót. Nếu bạn cố gắng sử dụng hình ảnh có thể kéo dài lớn hơn các nút (hoặc bất kỳ thứ gì khác) mà bạn muốn áp dụng, chúng có thể được hiển thị không chính xác (đặc biệt là trên iOS cũ hơn).

+0

Vì vậy, giá trị 0 có nghĩa là "không kéo dài bất kỳ thứ gì" hoặc "kéo dài đều trên toàn bộ hình ảnh"? Tôi không thể thấy bất kỳ điều gì có thể gây ra sự cố "hình chữ D". Tôi đoán điều đầu tiên tôi nên làm là đảm bảo MỌI hình ảnh nhỏ hơn nút MỌI. (Nếu không ... thì chuyện gì sẽ xảy ra?Hình ảnh chỉ được sử dụng "như-là" có kích thước? Và những gì sẽ trở thành của các giá trị cap trải dài sẽ không xảy ra?) – Susanna

+0

@Roberta: 0 có nghĩa là "kéo dài đều trên toàn bộ hình ảnh". Nếu hình ảnh nhỏ hơn các góc sẽ chồng lên nhau. – kennytm

+1

Hình minh họa thực sự hữu ích. – nonamelive

3

stretchableImageWithLeftCapWidth không hoạt động như bạn mong đợi. Tôi khuyên bạn nên sử dụng thuộc tính contentStretch của UIView để tiết kiệm cho bản thân.

FYI, cách cư xử stretchableImage là:

  • nếu bạn thu nhỏ hình ảnh, nó chỉ clip các phần trên và bên trái của hình ảnh chứ không phải là kéo dài bất cứ điều gì.
  • nếu bạn mở rộng hình ảnh, nó sẽ chỉ mở rộng cột pixel ngay bên dưới nắp trên cùng và hàng pixel ngay bên phải của nắp bên trái. Điều này làm việc cho đồ họa rất đơn giản nhưng sẽ trông lúng túng cho bất kỳ đồ họa có hiệu ứng như bóng hoặc bóng.

contentStretch, mặt khác, hoạt động giống như bạn mong đợi. Các đồ họa về cơ bản được chia thành 9 phần mở rộng VÀ HỢP ĐỒNG theo cách Kenny giải thích.

Ngoài ra, đừng quên rằng bất cứ lúc nào bạn kéo dài chế độ xem, nội dung của nóMã phải được đặt thành UIViewContentModeScaleToFill.

+0

Điều này không đúng. Như @KennyTM giải thích, họ không HỢP ĐỒNG theo cách đó: mũ không được tôn trọng nếu hình ảnh cần được hạ thấp. –

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