2011-09-15 29 views
5

Hãy tưởng tượng một hộp nhỏ màu đỏ (CALayer chẳng hạn) được vẽ ở góc dưới bên trái của lớp cha của nó (đó là lớp gốc của một lớp lưu trữ NSView).Làm thế nào để giữ một CALayer ở cùng một vị trí trong khi thay đổi kích thước NSView chính?

Khi khung trong những thay đổi quan điểm phụ huynh, hộp màu đỏ nên duy trì ở vị trí tương đương trên màn hình. Tôi làm điều này bằng cách điều chỉnh vị trí của nó tương ứng với góc dưới bên trái của chế độ xem gốc.

Vấn đề là trong một số trường hợp có nhấp nháy và tôi có thể thấy lớp hộp màu đỏ được vẽ ở góc dưới bên trái của khung mở rộng trước khi nó được hiển thị ở vị trí chính xác.

Tôi giả định rằng việc gói khung và vị trí thay đổi thành một CATransaction sẽ thực hiện cả hai thay đổi cùng nhau, nhưng điều đó không phải lúc nào cũng hoạt động (tài liệu nói rằng bằng cách sử dụng giao dịch, hoạt ảnh sẽ bắt đầu cùng một lúc, nhưng vẫn có dường như là một điều kiện chủng tộc ở lần).

Làm thế nào tôi có thể điều chỉnh khung của phụ huynh NSView trong khi vẫn giữ lớp trẻ ở vị trí nhận thức của nó?

Ví dụ và mã:

NSView and box layer

ý tưởng riêng của tôi:

  1. Ẩn lớp hộp màu đỏ, cập nhật vị trí, hiển thị nó một lần nữa

  2. Sử dụng các ràng buộc để liên kết nó với góc phải. Vấn đề là bù đắp này cũng có thể thay đổi và tôi sẽ phải cập nhật ràng buộc có thể dẫn đến vấn đề nhấp nháy tương tự.

Trả lời

0

Thử xóa mã bạn đã tạo để lớp di chuyển với chế độ xem và đặt lớp này vào nơi bạn đang tạo lớp.

boxLayer.autoresizingMask = kCALayerMaxXMargin | kCALayerMinYMargin; 
Các vấn đề liên quan