2012-11-30 34 views
6

Tôi thừa kế một dự án quá phức tạp (vì vậy tôi không biết tất cả các hoạt động bên trong) và tôi đang gặp lỗi. Một số phần nhất định trong ứng dụng của tôi có một số hoạt ảnh dài được thực hiện với Giao dịch chuyển hướng và dường như điều này khiến cho layoutSubviews được gọi nhiều lần trong khi hoạt ảnh đang hoạt động. Điều này không xảy ra trên ios5 và mọi thứ đều chính xác, nhưng trên ios6 nó được gọi là nonstop và can thiệp với nhiều bố cục của khung nhìn. Tất cả dấu vết ngăn xếp đều bị ẩn/chuyển sang màu xám, nhưng dường như bắt đầu bằng CA::Transaction::commit()layoutSubviews được gọi lặp đi lặp lại trên ios6 sau khi giao dịch

Có bất kỳ điều gì với thay đổi Giao dịch giữa các phiên bản ios để gây ra điều gì đó như thế này không?

+1

bạn đang tạo hoạt ảnh uiview với tự động hóaSubviews được đặt thành true? – mxb

+0

Có sử dụng tự động trả lời không? Điều đó đã được giới thiệu trong ios6. Nếu bạn làm một số điều mà gọi bố trí, hoặc làm những việc ở vị trí sai, bạn sẽ nhận được một vòng lặp hoặc có được cơ bản cách tiếp cận thường xuyên hơn cần thiết. Trước tiên, bạn muốn tìm kiếm các setNeedsLayout giả hoặc các cuộc gọi bố trí. – uchuugaka

+0

Bạn đã kiểm tra câu hỏi này chưa? http://stackoverflow.com/questions/728372/when-is-layoutsubviews-called – arturdev

Trả lời

0

Âm thanh như sự cố Autolayout. Chế độ xem hoặc bất kỳ chế độ xem phụ nào của nó có sử dụng Autolayout không? Autolayout là tốt đẹp nhưng không có vẻ rất nhanh và hiệu quả vì vậy có thể gây ra các vấn đề khi hoạt hình.

Tất nhiên, có thể cần phải phân loại từng phần phụ trong hoạt ảnh nếu kích thước một hình dạng của chế độ xem thay đổi theo cách ảnh hưởng đến vị trí hoặc kích thước của chế độ xem phụ. Hãy xem xét các hình ảnh động và những gì nó có hiệu lực.

1

Xem bài đăng này: UIView/CALayer: Transform triggers layoutSubviews in superview

của Apple đã trả lời tôi qua TSI:

lý do tại sao tôi lại thấy hành vi này? là sự không nhất quán này hay tôi hiểu lầm một số khái niệm cốt lõi?

Chế độ xem sẽ được gắn cờ để bố cục bất cứ khi nào hệ thống cảm thấy thứ gì đó đã thay đổi yêu cầu chế độ xem tính lại khung của các bản phụ của nó. Điều này có thể xảy ra thường xuyên hơn bạn mong đợi và chính xác khi hệ thống chọn gắn cờ chế độ xem là yêu cầu bố cục là chi tiết triển khai.

tại sao nó xếp lên trên cấu trúc phân cấp chế độ xem?

Nói chung, thay đổi thuộc tính hình học của một cái nhìn (hoặc lớp) sẽ kích hoạt một đợt bố trí invalidations lên hệ thống phân cấp xem vì quan điểm phụ huynh có thể có những hạn chế Auto Layout liên quan đến con sửa đổi. Lưu ý rằng bố cục tự động đang hoạt động ở một số biểu mẫu bất kể bạn đã bật nó chưa.

làm cách nào để tránh giám sát bố cụcSubviews mỗi khi tôi thay đổi biến đổi?

Không có cách nào để bỏ qua hành vi này. Đó là một phần của sổ sách kế toán nội bộ của UIKit, được yêu cầu để giữ cho hệ thống phân cấp khung nhìn nhất quán.

+0

Tôi đã xem bài đăng này rồi, nhưng tôi không hiểu cách làm việc này. Trong trường hợp của tôi, tôi có một điều khiển tùy chỉnh nơi cây xem là A-> B Tôi đang tạo hoạt ảnh cho B.layer và tôi cần thiết lập khung của B trong layoutSubviews của A.Nhưng layoutSubviews của A được gọi khi tôi animate B.layer –

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