2017-11-13 9 views
0

제목에 내 앱에 문제가 있다고합니다. iOS에서 애니메이션을 표시하기 전에 네트워크 시간 초과를 올바르게 설정하는 방법은 무엇입니까?

  • 다운로드를 보여주는 몇 가지 제품이 있는지보기 위해 중포 기지에

    • 앱이 메인 ​​메뉴를로드하고 연결 : 제가 글 머리 기호 목록을 사용하여 달성하기 위해 노력하고있어 세부에서 조금 더 설명하게 제품 이미지
    • 애니메이션은 제품 정보 및 이미지

    을 보여주기 위해의 내용은 내가 연결이 작동하지 않거나 제품이 존재하지 않는 경우를 처리하는 기능을 만들었습니다. 문제는 애니메이션이 시작되기 전에 연결이 너무 느려서 이미지를로드 할 수없는 경우입니다 (약 2 초). 이 경우 앱이 조금 붙어서 애니메이션이 끝나기 전에 제품이 표시됩니다.

    로드 코드

    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        // The view where the product will be shown 
        self.productView.alpha = 0.0 
    
        // Checks the internet connection 
        if (ConnectionService.isConnectedToNetwork()) { 
         fetchDataFromDatabase(downloadCompleted: { (productToShow) in 
          self.fillPromoView(usingProduct: productToShow) 
         }) 
        } else { 
         fillPromoView(nil) 
        } 
    } 
    

    나타난다 다음 코드

    override func viewDidAppear(_ animated: Bool) { 
        super.viewDidAppear(animated) 
    
        UIView.animate(withDuration: 0.5, delay: 2.0, options: UIViewAnimationOptions.curveEaseInOut, animations: { 
          ... 
        } 
    } 
    

    제품 이미지 다운로드 코드 :

    func fetchDataFromDatabase(downloadCompleted: @escaping ((Product?) -> Void)) { 
        FirebaseService.instance.getProductList { (productList) in 
         if (productList.count != 0) { 
          do { 
           let productImage = try Data(contentsOf: productList.productImage as URL) 
    
           // Fill the IBOutlet with the downloaded image 
           self.promoProductImg.image = UIImage(data: productImage) 
    
           downloadCompleted(productList) 
          } catch { 
           downloadCompleted(nil) 
          } 
         } else { 
          downloadCompleted(nil) 
         } 
        } 
    } 
    

    내 목표는 내가 응답을 한 번 애니메이션을 시작하는 것입니다 다운로드 상태에서 또는 이미지를 다운로드하는 데 연결 시간이 2 초 이상 걸리기 때문입니다. 어떤 충고?

  • 답변

    0

    FireBase의 응답 여부와 상관없이 viewDidAppear의 코드가 실행됩니다. 당신이이 일의 simpliest 방법이 될 것

    데이터를로드 (여부) 때 알고 응용 프로그램을 허용해야 추상적 인 수준에서

    ;
    1. 는 viewDidAppear에서 자체 전용 기능으로보기 애니메이션 코드를 이동
    2. 제품 세부 정보 페이지 (here is an example of Facebooks version of it, see the first gif)
    3. 에 대한 "골격"템플릿 되세요.
    4. 이 함수를 fetchDataFromDatabase의 성공 부분에있는 NSNotificationCenter을 통해 호출하십시오 (이 알림 패러다임을 통해 fetchDataFromDatabase 함수에서 알림을 "실행"함). 그러면 viewController는이 알림을 "수신 대기"하고 그에 따라 적절하게 응답합니다 (이 경우,) ")
    0

    로딩 프로세스를 보여주기 위해 뷰의 기본 상태를 설정합니다. (UIActivityIndicatorView이 빈 화면은 내가 말하는 것에 대한 가장 간단한 예입니다.) 그러면 fetch 메서드가 처리되는 동안 앱이 고정되어 있지 않다는 것을 사용자가 이해할 수 있습니다. 그렇다면 downloadCompleted 메서드를 수정합니다. UIView.animate 메서드를 끝으로 이동합니다. 즉, 모든 UI 업데이트는 가져 오기 프로세스가 완료된 후에 만 ​​수행됩니다.

    메커니즘의 비동기 특성으로 인하여 반입이 완료되기 전에 viewDidAppear이 호출 될 수 있습니다.