2017-12-26 2 views
1

enter image description here스위프트 아이폰 OS

내가 1 뷰 컨트롤러 단순 텍스트 필드와 이미지보기를 제시하기 위해,이 문서는 텍스트 필드에 사용자 정보를 업데이트하기 위해 데이터를 사용한다 즉시 사용할 수 있지만 아바타의 경우 시간이 걸리므로 페이지가 열린 후 약 3 초 후에 이미지가 나타납니다.

아바타가 완전히 다운로드 된 후에야 페이지가 완전히 열리도록하고 싶습니다. 그래서 다운로드 페이지가 열리고 페이지가 열린 후에 로딩 페이지에서 활동 표시기를 원합니다. 우리가 Mac을 열 때처럼 모든 데이터가 표시되기 전에 먼저 활동 표시기가 있습니다.

어떻게해야합니까? 다른보기 컨트롤러를 추가해야합니까? 또는 이것을 지원하는 UI 요소가 있습니까? 활동 표시기를 사용하여 시도했지만 활동 표시기는 실행되지만 이미지는 여전히 사용할 수 없습니다. 여기에 하나 스피너 또는 진행 바, 내가

감사합니다 :)

import UIKit 

class EditInfoVC: UIViewController { 

    @IBOutlet weak var usernameTextfield: UITextField! 
    @IBOutlet weak var firstnameTextfield: UITextField! 
    @IBOutlet weak var lastnameTextfield: UITextField! 
    @IBOutlet weak var emailTextField: UITextField! 
    @IBOutlet weak var saveButton: UIButton! 
    @IBOutlet weak var avatar: UIImageView! 
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 




    override func viewDidLoad() { 
     super.viewDidLoad() 

     // round corner 
     saveButton.layer.cornerRadius = saveButton.bounds.width/4.5 
     avatar.layer.cornerRadius = avatar.bounds.width/2 
     avatar.layer.masksToBounds = true 

     //Give title to navigation controller 
     self.navigationItem.title = "Update Profile" 



     // disable save button in the beginning 
     saveButton.isEnabled = false 
     saveButton.alpha = 0.4 


     //shortcut 
     let username = userInfo?["username"] as! String 
     let email = userInfo?["email"] as! String 
     let avatarPath = userInfo?["avatar"] as! String 

     let fullname = userInfo?["fullname"] as! String 
     let fullnameArray = fullname.characters.split {$0 == " "}.map(String.init) 
     let firstname = fullnameArray[0] 
     let lastname = fullnameArray[1] 

     // assign variable sebagai nilai awal 
     usernameTextfield.text = username 
     firstnameTextfield.text = firstname 
     lastnameTextfield.text = lastname 
     emailTextField.text = email 


     if !(avatarPath.isEmpty) { 

      activityIndicator.startAnimating() 

      let imageURL = URL(string: avatarPath) 
      let session = URLSession(configuration: .ephemeral) 
      let task = session.dataTask(with: imageURL!, completionHandler: { (data, response, error) in 

       DispatchQueue.main.async { 

        if let imageData = data { 
         self.avatar.image = UIImage(data: imageData) 
         self.activityIndicator.stopAnimating() 
        } 
       } 

      }) 

      task.resume() 
     } 




    } 




    @IBAction func saveButtonDidPressed(_ sender: Any) { 

// send data to database 




    } 







} 




} 
+0

애니메이션 및 텍스트와 함께 스피너를 표시하는 MBProgressHUD 라이브러리 사용 – Vinodh

답변

2

그것은로드 기호의 형태를 보여주는 ViewController을 제시하는 것이 가장을 사용하는 간단한 코드입니다. 작업을 단순화하기 위해 데이터를 가져 오는 동안 UIView (로드 표시기가 있음)을이 ViewController 위에 추가 할 수 있습니다. 모든 것이로드되면 그 UIView을 제거하면됩니다.

또한 UX 관점에서 바/회 전자를 넣는 것보다 skeleton screens이 더 좋습니다.

관련 문제