2012-07-31 29 views
19

Tôi có một CALayer và tôi muốn thêm vào đó một hình ảnh có thể kéo dài. Nếu tôi chỉ cần thực hiện:Cách thêm UIImage có thể kéo dài trong CALayer.contents?

 _layer.contents = (id)[[UIImage imageNamed:@"grayTrim.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0)].CGImage; 

nó sẽ không hoạt động vì nội dung mặc định của lớp là trọng lựcKính trọng.

Tôi đã đọc rằng điều này có thể được thực hiện bằng cách sử dụng contentCenter nhưng tôi dường như không thể tìm ra chính xác tôi sẽ sử dụng điều đó để đạt được hình ảnh được kéo dài trong CALayer của tôi như thế nào.

Bất kỳ ý tưởng nào đều được hoan nghênh!

Horatiu

Trả lời

33

Câu trả lời cho câu hỏi này là câu hỏi này. Cho phép nói rằng bạn có một hình ảnh căng ra chỉ trải dài theo chiều rộng và có chiều cao cố định (vì lợi ích đơn giản).

Hình ảnh là 31px chiều rộng (15px kích thước cố định - không căng -, 1px sẽ được kéo dài)

Giả sử lớp của bạn là một CALayer phân lớp phương pháp init của bạn sẽ giống như thế này:

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     UIImage *stretchableImage = (id)[UIImage imageNamed:@"stretchableImage.png"]; 
     self.contents = (id)stretchableImage.CGImage; 

     self.contentsScale = [UIScreen mainScreen].scale; //<-needed for the retina display, otherwise our image will not be scaled properly 

     self.contentsCenter = CGRectMake(15.0/stretchableImage.size.width,0.0/stretchableImage.size.height,1.0/stretchableImage.size.width,0.0/stretchableImage.size.height); 
    } 
    return self; 
} 

theo tài liệu hướng dẫn nội dungCenter hình chữ nhật phải có giá trị từ 0-1.

Mặc định là hình chữ nhật đơn vị (0.0,0.0) (1,0,1,0) dẫn đến toàn bộ hình ảnh được chia tỷ lệ. Nếu hình chữ nhật mở rộng ra ngoài hình chữ nhật đơn vị thì kết quả là không xác định.

Đây là nó. Hy vọng rằng một người khác sẽ thấy điều này hữu ích và nó sẽ tiết kiệm một số thời gian phát triển.

+0

Tôi thấy hữu ích. Cảm ơn! – duci9y

+1

Tốt hơn là nên sử dụng tỷ lệ của hình ảnh. –

+6

Giải pháp được đề xuất sẽ không thành công trên iPhone 6 cộng nếu không có biến thể 3x của hình ảnh. Nó là tốt hơn để sử dụng tài sản quy mô của hình ảnh. 'self.contentScale = strechableImage.scale' Sau đó nó sẽ hoạt động ngay cả khi không phải tất cả các biến thể của hình ảnh (@ 2x @ 3x) đều có mặt. –

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