Контроллер навигации задерживается перед нажатием на View Controller - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть View Controller A с коллекционным представлением со списком элементов. Я должен нажать на другой вид контроллера B.

Когда я выбираю элемент в представлении коллекции, я хочу, чтобы этот толчок происходил. Но толчок происходит после небольшой задержки, которую я хочу избежать.

У меня было несколько строк кода после метода didSelect Item, а также NavigationController's navigation Bar setup и CollectionView setup в View Did load и View Will Appear методах View Controller B.

Я попытался удалить коды после CollectionView Did Select, просто чтобы проверить, не вызывает ли это задержку, но анимация все еще медленная.

Просмотр кода контроллера A.

DispatchQueue.global(qos: .background).async {
        DispatchQueue.main.async {
            //write your code here
            var dict = projectsArray[indexPath.row - 1] as! [String:Any]

        guard let id = dict["_id"] as? NSNumber else{return }
        var canvasIds = NSArray()
        if let idsAll = projectCanvasIds.object(forKey: id.stringValue) as? NSArray{
            canvasIds = idsAll
        }
        dict["CanvasIds"] = canvasIds
        let dict2 = dict as NSDictionary
        IndexContentsModel.projectSlectedCanvasIds = dict2.mutableCopy() as! NSMutableDictionary
        let vc = IndexCanvasViewController(nibName: "IndexCanvasViewController", bundle: nil)

        self.navigationController?.pushViewController(vc, animated: true)

        }
    }

Просмотр кода контроллера B

Просмотр загруженного файла имеет CollectionViewInit() и SetUI()

func collectionViewinit(){
    let nib = UINib(nibName: "TopCanvasesCollectionViewCell", bundle: nil)
    self.collectionView.register(nib, forCellWithReuseIdentifier: "topCanvasCell")

    collectionView.register(UINib(nibName: "CanvasViewCollectionReusableView3", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "canvasHeaderView")
}

func setUI(){


    self.navigationController?.navigationItem.hidesBackButton = true
    self.navigationController?.navigationBar.clipsToBounds = true
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    self.navigationController?.navigationBar.shadowImage = UIImage()

    let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))

    let hostStr = host
    let userinfo = UserInfo.shared()
    if let photo = userinfo?.dicJSON.object(forKey: "photo") as? String{
        let profile = host + photo
        imgView.sd_setImage(with: URL(string: profile), completed: nil)
    }else{
        imgView.image = UIImage(named: "test_Profile")
    }
    let button = UIButton()

    button.addTarget(self, action:#selector(profileViewButtonPressed(_:)), for: UIControlEvents.touchUpInside)
    button.frame = CGRect(x: 0, y: 0, width: 36, height: 36)// CGRectMake(0, 0, 36, 36)
    button.layer.cornerRadius = button.frame.width / 2
    button.layer.masksToBounds = true
    button.setImage(imgView.image, for: UIControlState.normal)
    //        let profileButton = UIBarButtonItem(customView: button)



    let searchImage    = UIImage(named: "Search_Icon3")!
    let notificationImage  = UIImage(named: "Notification_Icon3")!
    let profileImage  = UIImage(named: "test_Profile")!
    let backImage  = UIImage(named: "Back_Icon3")!

    let searchButton   = UIBarButtonItem(image: searchImage,  style: .plain, target: self, action: #selector(searchViewButtonPressed(_:)))
    let notificationButton   = UIBarButtonItem(image: notificationImage,  style: .plain, target: self, action: #selector(notificationViewButtonPressed(_:)))
    let profileButton = UIBarButtonItem(image: profileImage,  style: .plain, target: self, action: #selector(profileViewButtonPressed(_:)))
    let backButton   = UIBarButtonItem(image: backImage,  style: .plain, target: self, action: #selector(backButtonPressed(_:)))



    self.navigationItem.rightBarButtonItems = [profileButton,notificationButton,searchButton]
    self.navigationController?.navigationBar.tintColor = UIColor(hexString: "#373839")
    self.navigationItem.leftBarButtonItem = backButton

    self.setValues()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    if #available(iOS 11.0, *) {
        self.navigationController?.navigationBar.prefersLargeTitles = false
        self.navigationController?.navigationItem.largeTitleDisplayMode = .never
        self.navigationController!.navigationBar.backgroundColor = UIColor.white
    } else {
        // Fallback on earlier versions
    }

    if (self.isBeingPresented || self.isMovingToParentViewController) {
        self.collectionView.animateViews(animations: animationsCanvas, reversed: false, initialAlpha: 0, finalAlpha: 1, delay: 0, duration: 0.07, animationInterval: 0.1, completion: nil)
    }
}

enter image description here

...