如何使collectionView停止闪烁

时间:2015-10-13 14:49:18

标签: xcode swift uicollectionview

我的收藏视图存在问题,在视频出现在屏幕上后,我会在一秒钟内“眨眼”。

可能导致此问题的viewDidLoadviewDidAppear吗?

这是我目前的Swift代码:

class HomeViewController: UIViewController
{

// MARK: IBOutlets

@IBOutlet weak var backgroundImageView: UIImageView!
@IBOutlet weak var collectionView: UICollectionView!

@IBOutlet weak var currentUserProfileImageButton: UIButton!
@IBOutlet weak var currentUserFullNameButton: UIButton!

// MARK: - UICollectionViewDataSource
private var interests = [Interest]()

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent

    }





override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    if PFUser.currentUser() == nil {
        // the user hasn't logged in yet
        showLogin()
    } else {
        // the user logged in, do something else
        fetchInterests()

        let center = NSNotificationCenter.defaultCenter()
        let queue = NSOperationQueue.mainQueue()
        center.addObserverForName("NewInterestCreated", object: nil, queue: queue, usingBlock: { (notification) -> Void in

            if let newInterest = notification.userInfo?["newInterestObject"] as? Interest {
                if !self.interestWasDisplayed(newInterest) {
                    self.interests.insert(newInterest, atIndex: 0)
                    self.collectionView.reloadData()
                }
            }
        })

    }
}
func interestWasDisplayed(newInterest: Interest) -> Bool {
    for interest in interests {
        if interest.objectId! == newInterest.objectId! {
            return true
        }
    }
    return false
}

override func viewDidLoad() {
    super.viewDidLoad()



    // Do any additional setup after loading the view.
    if UIScreen.mainScreen().bounds.size.height == 480.0 {
        let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
        flowLayout.itemSize = CGSizeMake(250.0, 300.0)
    }

    configureUserProfile()

}





func configureUserProfile()
{
    // configure image button

    currentUserProfileImageButton.contentMode = UIViewContentMode.ScaleAspectFill
    currentUserProfileImageButton.layer.cornerRadius = currentUserProfileImageButton.bounds.width / 2
    currentUserProfileImageButton.layer.masksToBounds = true
}

private struct Storyboard {
    static let CellIdentifier = "Interest Cell"
}

@IBAction func userProfileButtonClicked()
{
    PFUser.logOut()
    showLogin()
}
// MARK: - Fetch Data From Parse

func fetchInterests()
{
    let currentUser = User.currentUser()!
    let interestIds = currentUser.interestIds
    if interestIds?.count > 0
    {
        let interestQuery = PFQuery(className: Interest.parseClassName())
        interestQuery.orderByDescending("updatedAt")
        interestQuery.cachePolicy = PFCachePolicy.NetworkElseCache
        interestQuery.whereKey("objectId", containedIn: interestIds)

        interestQuery.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
            if error == nil {
                if let interestObjects = objects as [PFObject]? {
                    self.interests.removeAll()
                    for interestObject in interestObjects {
                        let interest = interestObject as! Interest
                        self.interests.append(interest)
                    }
                    self.collectionView.reloadData()
                }
            } else {
                print("\(error!.localizedDescription)")
            }
        })
    }

}

// MARK: - Navigation

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "Show Interest" {
        let cell = sender as! InterestCollectionViewCell
        let interest = cell.interest

        let navigationViewController = segue.destinationViewController as! UINavigationController

        let interestViewController = navigationViewController.topViewController as! InterestViewController
        interestViewController.interest = interest

    } else if segue.identifier == "CreateNewInterest" {
        _ = segue.destinationViewController as! NewInterestViewController

    } else if segue.identifier == "Show Discover" {
        _ = segue.destinationViewController as! DiscoverViewController

    }
}

func showLogin()
{
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let welcomeNavigationVC = storyboard.instantiateViewControllerWithIdentifier("WelcomeNavigationViewController") as! UINavigationController

self.presentViewController(welcomeNavigationVC, animated: true, completion: nil)
}
}


 extension HomeViewController : UICollectionViewDataSource{
   func numberOfSectionsInCollectionView(collectionView:   UICollectionView) -> Int
{
    return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
    return interests.count
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Storyboard.CellIdentifier, forIndexPath: indexPath) as! InterestCollectionViewCell

    cell.interest = self.interests[indexPath.item]

    return cell
} 
}

extension HomeViewController : UIScrollViewDelegate{
   func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
{
    let layout = self.collectionView?.collectionViewLayout as! UICollectionViewFlowLayout
    let cellWidthIncludingSpacing = layout.itemSize.width + layout.minimumLineSpacing

    var offset = targetContentOffset.memory
    let index = (offset.x + scrollView.contentInset.left) / cellWidthIncludingSpacing
    let roundedIndex = round(index)

    offset = CGPoint(x: roundedIndex * cellWidthIncludingSpacing - scrollView.contentInset.left, y: -scrollView.contentInset.top)
    targetContentOffset.memory = offset
}
}

extension HomeViewController : PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate{
func presentLoginViewController()
{
    let logInController = PFLogInViewController()
    let signupController = PFSignUpViewController()

    signupController.delegate = self
    logInController.delegate = self

    logInController.fields = [PFLogInFields.UsernameAndPassword, PFLogInFields.LogInButton, PFLogInFields.SignUpButton]

    logInController.signUpController = signupController

    presentViewController(logInController, animated: true, completion: nil)

}

func logInViewController(logInController: PFLogInViewController, didLogInUser user: PFUser)
{
    logInController.dismissViewControllerAnimated(true, completion: nil)
}

func signUpViewController(signUpController: PFSignUpViewController, didSignUpUser user: PFUser)
{
    signUpController.dismissViewControllerAnimated(true, completion: nil)
}

}

谢谢你们:)

0 个答案:

没有答案