2011-01-31 40 views
5

Cách để tải hình ảnh đến lớp chỉ đơn giản là thế này:iPhone CALayer nội dung mảng hình ảnh đánh giá cao

CALayer *layer = [[CALayer alloc]init]; 

layer.contents = (id) [UIImage imageNamed:@"image.png"].CGImage; 

sau đó bạn thêm các lớp như lớp con đến xem một cái gì đó như:

giả sử bạn trong giao diện

[self.layer addSublayer:layer]; 

Bây giờ tôi muốn tải một mảng ảnh dưới dạng hoạt ảnh để cuối cùng tôi sẽ có được hình ảnh động.

vì vậy trước khi thực hiện các hoạt hình tôi đã thử nghiệm như sau:

[values insertObject:(id)[UIImage imageNamed:path].CGImage atIndex:i]; 

tất nhiên có một vòng lặp mà chạy mà nhập mỗi hình ảnh để chỉ số đúng ... và sau đó tôi nhận được một mảng của CGImage .. cho hoạt ảnh.

Tôi đã in mảng này và thấy điều này:

CGImage 0x17d900

CGImage 0x17f4e0

Vì vậy, các giá trị đang có .. và tôi không nhận được bất kỳ lỗi .. nhưng tôi không nhìn thấy những hình ảnh ...

Hãy cho tôi biết nếu bạn có ý tưởng ....

+0

Bạn đang thực hiện hoạt ảnh hoặc chuyển đổi giữa các mục trong nội dung mảng để hiển thị như thế nào? – hotpaw2

Trả lời

5

Đây là đoạn mã hoạt động tốt cho một trong các dự án của tôi:

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath: @"contents"]; 
animation.calculationMode = kCAAnimationDiscrete; 
animation.duration = 1.0; 
animation.values = values; // NSArray of CGImageRefs 
[layer addAnimation: animation forKey: @"contents"]; 

Tuy nhiên, tôi có hình ảnh phóng to cho khung hình động và trên iPhone/iPod cũ gây ra sự cố nghiêm trọng về hiệu suất. Nếu bạn chạy vào điều này, các thành phần bí mật là sử dụng các hình ảnh trước khi kết xuất (IIRC, chúng được đại diện với một lớp học CABackingStore riêng). Tóm lại, bạn tạo một CALayer có kích thước chính xác, sử dụng drawInContext: để vẽ một khung hình động, sau đó bạn lặp qua các khung hình động, nơi bạn cho lớp ảnh khung, gửi display và lưu nội dung của nó thành mảng. Kỹ thuật lưu vào bộ nhớ cache an toàn miễn là bạn không cố gắng thao tác các hình ảnh được hiển thị trước theo bất kỳ cách nào: về cơ bản, bạn chỉ cần thực hiện layer1.contents = layer2.contents.

Đừng lãng phí thời gian của bạn khi triển khai thực hiện ở trên trừ khi bạn gặp sự cố về hiệu suất.

+0

Có, tôi đã bỏ lỡ keyPath. –

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