2013-09-23 72 views
40

Tôi quan tâm đến một ví dụ ngắn gọn về làm thế nào để tạo ra một lớp con NSObject mà thực hiện các UIViewControllerInteractiveTransitioning giao thức để quản lý quá trình chuyển đổi tùy chỉnh tương tác giữa hai UIViewController s. Lý tưởng nhất là để phản ứng với cử chỉ vuốt. Một cái gì đó giống như các swipe tương tác mặc định iOS7 mà bây giờ đi kèm với UINavigationController, nhưng một ví dụ thực hiện tùy chỉnh/thủ công về điều này.Đúng cách để thực hiện một tùy chỉnh UIViewController chuyển tiếp tương tác sử dụng UIViewControllerInteractiveTransitioning Đại biểu Nghị định thư

Tôi đã đọc các tài liệu:

Và nhìn vào một vài ví dụ khác:

  • one
  • two
  • three
  • four (Tôi thiết lập này lên nhưng nó thêm về UIViewControllercontainment và thực hiện thủ công những hiệu ứng chuyển tiếp chứ không phải là UIViewControllerInteractiveTransitioning

Các tài liệu là khá rõ ràng nhưng không mã mẫu tham chiếu. Và các ví dụ để lại một chút để được mong muốn (câu hỏi chưa được trả lời về cách các phần khác nhau được gắn với nhau).

Vì vậy, câu hỏi của tôi là:

  1. Ai đó có thể giúp điền vào chỗ trống về làm thế nào để buộc một cử chỉ (ví dụ một swipe) đến đối tượng mà thực hiện giao thức UIViewControllerInteractiveTransitioning?
  2. Mối quan hệ giữa đối tượng triển khai giao thức UIViewControllerInteractiveTransitioning và triển khai giao thức UIViewControllerAnimatedTransitioning là gì? Có vẻ như bạn phải có cả hai để kích hoạt hiệu ứng chuyển tiếp tương tác ...

Cảm ơn trước ...

+0

Mã mẫu của bạn bị đóng/không thể tìm thấy. –

+0

Cảm ơn những người đứng đầu, xin lỗi về điều đó, tôi đã lấy nó xuống một vài ngày trước –

+0

Repo là sao lưu, hoặc không bao giờ xuống, không thể nhớ những gì đã xảy ra, có lẽ tôi đã thay đổi tên của repo hoặc một cái gì đó. Dù sao thì nó đã có. –

Trả lời

12

1) Cách đơn giản nhất để buộc một cử chỉ đến đối tượng UIViewControllerInteractiveTransitioning, là làm cho nó lớp con của UIPercentDrivenInteractiveTransition. Sau đó, nơi bạn thực hiện điều khiển cử chỉ, bạn gọi updateInteractiveTransition: đây một ví dụ với mã:

-(void)handlePinch:(UIPinchGestureRecognizer *)pinch { 

    CGFloat scale = pinch.scale; 
    switch (pinch.state) { 
     case UIGestureRecognizerStateBegan: { 
      _startScale = scale; 
      self.interactive = YES; 
      [self.navigationController popViewControllerAnimated:YES]; 
      break; 
     } 
     case UIGestureRecognizerStateChanged: { 
      CGFloat percent = (1.0 - scale/_startScale); 
      [self updateInteractiveTransition:(percent < 0.0) ? 0.0 : percent]; 
      break; 
     } 
     case UIGestureRecognizerStateEnded: { 
      CGFloat percent = (1.0 - scale/_startScale); 
      BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3); 
      if (cancelled) [self cancelInteractiveTransition]; 
      else [self finishInteractiveTransition]; 
      break; 
     } 
     case UIGestureRecognizerStateCancelled: { 
      CGFloat percent = (1.0 - scale/_startScale); 
      BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3); 
      if (cancelled) [self cancelInteractiveTransition]; 
      else [self finishInteractiveTransition]; 
      break; 
     } 
    } 
} 

Mã này là từ https://www.captechconsulting.com/blogs/ios-7-tutorial-series-custom-navigation-transitions--more

2) Chức năng animateTransition của UIViewControllerAnimatedTransitioning được sử dụng để thực hiện quá trình chuyển đổi tương tác. Nó được tự động phân vùng trong "khung hình chính" nhờ cuộc gọi trước đó của bạn đến updateInteractiveTransition.Nhưng tôi cho rằng nếu bạn thực hiện phương pháp startInteractiveTransition: của mình là UIViewControllerInteractiveTransitioning (vì vậy không sử dụng UIPercentDrivenInteractiveTransition phân lớp) thì bạn có trách nhiệm quản lý việc chuyển đổi hoàn toàn (không chắc chắn về điều đó .. xin lỗi nhưng tài liệu theo ý kiến ​​của tôi không thực sự rõ ràng).

+1

Nếu bạn thực hiện phương thức startInteractiveTransition: phương thức animateTransition không bao giờ được gọi (gỡ lỗi nó trong nhiều giờ, nhờ ý tưởng này) –