Đó đơn giản là cách hoạt ảnh của UIKit hoạt động. Tôi sắp xếp giải thích cách một nửa của nó hoạt động trong this answer, nhưng tôi sẽ cố gắng tóm tắt các bit liên quan:
- Mọi thứ đều là hình chữ nhật kết cấu. (Có một số ngoại lệ, như có lẽ là CAShapeLayer, nhưng điều này là đúng cho hầu hết các phần.)
UIView
thuộc tính của được liên kết với thuộc tính "cây mô hình" của CALayer. Họ thay đổi ngay lập tức.
- Hoạt ảnh hoạt động bằng cách làm động các thuộc tính "cây bản trình bày" từ giá trị bắt đầu cho giá trị mô hình hiện tại.
- Giá trị bắt đầu của hoạt ảnh theo mặc định là giá trị mô hình trước đó. Chỉ định
UIViewAnimationOptionBeginFromCurrentState
làm cho nó sử dụng giá trị bản trình bày hiện tại.
Có, tất nhiên, một vài trường hợp ngoại lệ (CAShapeLayer
có vẻ là hơn một rect kết cấu, UIScrollView
không di chuyển hình ảnh động trên một giờ, UIView chuyển tiếp là điều hoàn toàn khác ...).
Cách xoay là nghĩa là để hoạt động là bạn nhận được một -setFrame:
, mọi thứ được đặt ra (và có khả năng hiển thị lại), và sau đó thuộc tính có thể hoạt ảnh được làm động. Theo mặc định, điều này có nghĩa là mọi thứ sẽ trở lại kích thước mới nhưng được kéo dài để vừa với kích thước cũ và sau đó tạo hiệu ứng động (và unstretch) khi tiến trình xoay.
Điều đó nói rằng, GLKView
có thể hoạt động khác nhau.Nếu bạn đang sử dụng GLKViewController
, nó thậm chí có thể tạm dừng hiển thị trong khi hoạt ảnh xoay. Bạn có thể thử gọi -setNeedsDisplay
trong khi quay, nhưng nó sẽ không giúp ích nhiều vì khung đã được đặt thành giá trị cuối cùng của nó.
Có lẽ cách dễ nhất để xử lý hoạt ảnh xoay chính là buộc chuyển tiếp không hoạt ảnh sang khung xoay và sau đó thực hiện một số thao tác trong trình kết xuất (đường viền màu đen và thanh trạng thái hoạt ảnh riêng). Ngoài ra, cách truyền thống là làm cho VC của bạn chân dung và tự mình xử lý các thông báo định hướng thiết bị, nhưng đây là một loại giun lớn (bạn phải lo lắng về định hướng thanh trạng thái xác định những thứ như chạm vào). bù đắp và định hướng bàn phím, và nó có xu hướng tương tác "thú vị" khi chuyển sang/từ các VC khác).
Nguồn
2013-04-06 02:50:13
Bạn có đang sử dụng trình đổ bóng hoặc GLKBaseEffect không? –
Đã thử cả hai: 'GLKBaseEffect' và các trình đổ bóng của riêng tôi - cùng một kết quả. '-drawRect:' sẽ được gọi sau khi hoạt ảnh kết thúc - vì vậy mọi hình ảnh GL (mà chúng ta thường đặt ở đó) sẽ bị treo vào thời điểm đó. – kpower
Ok. Tôi đã nghĩ rằng có thể thuộc tính projectionMatrix trên GLKBaseEffect là lỗi. Tôi sẽ suy nghĩ ... –