2009-08-13 30 views
6

Tôi có UIScrollView với một chế độ xem phụ, một UIView được hỗ trợ bởi CATiledLayer. Tất cả đều hoạt động tốt với một ngoại lệ: khi tôi thay đổi hình ảnh từ người này sang người khác, CATiledLayer lưu trữ các mức thu phóng hình ảnh trước đó. Di chuyển xung quanh sau đó hiển thị hình ảnh cũ trong một giây trước khi tải hình ảnh cập nhật.Xóa Bộ đệm ẩn Bộ nhớ Cache Khi Thay đổi Hình ảnh

Có cách nào để xóa hoàn toàn bộ nhớ cache của CATiledLayer để nó không hiển thị hình ảnh cũ không? CATiledLayer rõ ràng biết rằng hình ảnh sao lưu đã thay đổi vì nó yêu cầu ủy quyền cho các ô xếp mới ...

Trả lời

23

Tôi nghĩ rằng bạn đang làm cho điều này phức tạp hơn một chút so với mức cần thiết. Tôi tin rằng tất cả những gì bạn phải làm là đặt nội dung của CATiledLayer thành 0.

myCATiledlayer.contents = nil. 
+13

Ngay trong soca nó cảnh báo rằng việc sửa đổi nội dung CATiledLayers sẽ biến nó thành một CALayer thông thường và chắc chắn là đủ. Tuy nhiên, một nhân viên của Apple đã nói với tôi một mẹo: nếu bạn gọi setNeedsDisplay trên trình chuyển đổi gần đây được chuyển đổi thành CALayer-CATiledLayer thì nó sẽ * biến đổi một cách kỳ diệu thành một CATiledLayer. – prime31

+0

Tyne đầu tiên đơn độc nên đọc: "Ngay trong tài liệu ..." – prime31

+3

Tôi đã có cùng một vấn đề như prime31 đã làm, và giải pháp này đã làm việc tuyệt vời! Tôi gọi myCATiledlayer.contents = nil trước khi gọi [myCATiledlayer setNeedsDisplay] và nó đã thực hiện công việc. Yay! – aslisabanci

2
-(void)invalidate 
{ 
    CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; 

    tiledLayer.tileSize = CGSizeMake(93,93);//Set a different tile size 
    tiledLayer.tileSize = CGSizeMake(92,92);//Restore original tile size 
} 

này làm việc cho tôi.

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