2015-02-15 14 views
6

Tôi đang triển khai quá trình chuyển đổi tùy chỉnh giữa các bộ điều khiển chế độ xem trong iOS 7+. Đặc biệt, tôi có cùng một nút trong bộ điều khiển xem A và bộ điều khiển xem B, sự khác biệt duy nhất ở vị trí của nó (nó cao hơn một chút trong bộ điều khiển xem B).Nhận khung hình cuối cùng của các bản xem trước khi đang trong quá trình chuyển đổi bộ điều khiển chế độ xem

Tôi muốn rằng trong quá trình chuyển đổi từ quan điểm điều khiển A đến xem điều khiển B nút từ A di chuyển lên để nó kết thúc ở vị trí cuối cùng trong quan điểm điều khiển B.

Dưới đây là phương pháp animateTransition: tôi:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 

    UIView *containerView = [transitionContext containerView]; 

    [containerView insertSubview:toViewController.view belowSubview:fromViewController.view]; 

    UIButton *fromButton = (UIButton *)[containerView viewWithTag:1]; 
    UIButton *toButton = (UIButton *)[containerView viewWithTag:2]; 

    toButton.hidden = YES; 

    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ 
     fromButton.center = toButton.center; 
    } completion:^(BOOL finished) { 
     toButton.hidden = NO; 
     [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; 
    }]; 
} 

Vấn đề tôi thấy là toButton.center KHÔNG phải là vị trí chính xác. Nó giống như ràng buộc AutoLayout chưa được áp dụng (tôi nhận được cùng một khung rect như trong IB). Điều này khiến nút không kết thúc ở vị trí chính xác sau khi quá trình chuyển đổi kết thúc.

Lỗi ở đâu? Làm thế nào tôi có thể có được khung hình chính xác của các bản xem trước từ trình điều khiển xem được trình bày? Nếu điều đó là không thể bởi vì bộ điều khiển xem B chưa xuất hiện, làm thế nào tôi có thể tạo hiệu ứng animate để đạt được hiệu ứng này?

+1

Bạn đã tìm thấy giải pháp nào cho vấn đề này chưa? Tôi đang đối mặt với cùng một vấn đề. – Alex

+0

@ Alex Không, chưa có giải pháp nào. –

Trả lời

0

Thay vì đặt trung tâm tuyệt đối, hãy điều chỉnh tâm bằng đồng bằng.

6

Bạn có thể gọi layoutIfNeeded() trên chế độ xem của toViewController trước khi bắt đầu hoạt ảnh. Điều đó sẽ bố trí các bản xem trước của bạn và cung cấp cho bạn khung cuối cùng cho nút toButton của bạn.

+0

Đây phải là câu trả lời đúng. –

+0

Điều này, dính setNeedsLayout() trong đó đầu tiên và bạn tốt để đi. – GoldenJoe

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