У меня есть 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)
}
}