2015-10-07 17 views
9

Dường như phương pháp viewWillTransitionToSize:withTransitionCoordinator: được gọi nhiều lần khi ứng dụng đi vào nền hoặc không hoạt động kể từ iOS 9.viewWillTransitionToSize: withTransitionCoordinator: gọi khi ứng dụng đi vào nền hoặc không hoạt động

Ví dụ, nếu ứng dụng là trong bức chân dung trên iPad, nhấn nút trang chủ sẽ khiến ứng dụng nhận cuộc gọi phương thức đầu tiên với kích thước 1024x768 (ngang) và sau đó với 768x1024 (quay lại chân dung). Điều đó dẫn tôi đến kết luận rằng iOS thực hiện việc này để có được ảnh chụp màn hình cho trình chuyển đổi ứng dụng.

Logic ứng dụng của chúng tôi phụ thuộc vào kích thước màn hình và thay đổi đối với tác vụ kích hoạt màn hình kích thước cập nhật mô hình của chúng tôi liên quan đến kích thước mới. Chúng ta cần phải thực hiện điều này khi người dùng xoay thiết bị hoặc chuyển sang chế độ đa nhiệm (chế độ xem tách), nhưng chúng tôi không được thực hiện khi người dùng chuyển sang chế độ nền.

Một ý tưởng là sử dụng UIApplicationWillResignActiveNotification thông báo, nhưng điều đó hóa ra là nhiệm vụ bất khả bởi vì đôi khi viewWillTransitionToSize:withTransitionCoordinator: được gọi trước khi thông báo được gửi và othertimes nó được gọi sau khi thông báo được gửi:/

Bất kỳ ý tưởng ?

Trả lời

1

Tôi hiện đang gặp sự cố tương tự. Tôi làm rất nhiều công việc khi kích thước thay đổi và không thể có nó xảy ra khi đi vào nền. Một điều mà làm việc cho tôi "hầu hết" thời gian là kiểm tra xem ứng dụng có ở chế độ nền hay không bằng cách sử dụng [uiapplication sharedApplication] applicationState]. Trạng thái ứng dụng được đặt thành UIApplicationStateBackground trước khi thực hiện thêm 2 lệnh gọi hàm viewWillTransitionToSize. Điều này có vẻ là nhất quán. Tôi đang gặp một số vấn đề khi ứng dụng được vuốt bằng cách sử dụng đa nhiệm, sau đó chuyển sang nền và sau đó nền trước lại ở kích thước đầy đủ. Thứ tự các cuộc gọi dường như không nhất quán trong trường hợp này để xác định những thay đổi kích thước nào nên được sử dụng.

+0

workaround hiện tại của tôi là để trì hoãn logic trong viewWillTransitionToSize 0,1 giây và kiểm tra xem UIApplication.sharedApplication(). ApplicationState vẫn hoạt động. Đó là hack xấu xí, nhưng tôi thấy không có cách nào khác xung quanh nó. –

0

Yup, cùng một vấn đề. Bạn có thể, thay vì sử dụng 0,1 giây, hãy sử dụng số transitionDuration() của điều phối viên. Sau đó, kiểm tra trạng thái nền.

+0

Thật không may là nếu bạn quan tâm đến trạng thái trước khi hoạt ảnh hoàn tất ... –

1

Trong viewWillTransitionToSize:withTransitionCoordinator bạn có thể sử dụng UIViewControllerTransitionCoordinator để biết thời điểm quá trình chuyển đổi hoàn tất. Sau đó, hãy kiểm tra xem ứng dụng của bạn không được tạo nền và thực hiện logic của bạn.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 

     // after transition 

     if ([UIApplication sharedApplication].applicationState != UIApplicationStateBackground) { 
      // perform logic 
     } 
    }]; 
} 
+1

Nếu bạn nhấn nút nguồn, nhiều lần nó sẽ trả về activeState. – Rajneesh071

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