检查UITableViewCell是否在Swift中完全可见

时间:2015-06-05 07:58:22

标签: uitableview swift ios8

我正在使用Parse来存储拥有视频的用户,然后在PFQueryTableViewController(我认为是UITableViewController的子类)中显示他们的视频。我只想要TableViewCell中完全可见的视频自动播放,但我在制作正确的视频播放方面遇到了困难。我寻找解决方案,但一切都在Objective-C中,我尝试在Swift中使用这些解决方案是不成功的。这是我的代码:

override func scrollViewDidScroll(scrollView: UIScrollView) {
    var cells = self.tableView.visibleCells()
    var indexPaths = self.tableView.indexPathsForVisibleRows()!

    if (cells.count == 1) {
        self.checkVisibilityOfCell(cells[0] as! UsersTableViewCell, forIndexPath: indexPaths[0] as! NSIndexPath)
    } else if (cells.count == 2) {
        self.checkVisibilityOfCell(cells[1] as! UsersTableViewCell, forIndexPath: indexPaths[1] as! NSIndexPath)
    } else if (cells.count > 2) {
        for i in 1...(cells.count - 1) {
            (cells[i] as! UsersTableViewCell).completelyVisible = true
        }
    }
}

func checkVisibilityOfCell(cell : UsersTableViewCell, forIndexPath : NSIndexPath){
    var cellRect : CGRect = self.tableView.rectForRowAtIndexPath(forIndexPath)
    cellRect = self.tableView.superview!.convertRect(cellRect, fromView: self.tableView)
    var completelyVisible : Bool = self.tableView.frame.contains(cellRect)
    cell.completelyVisible = completelyVisible
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
    var cell : UsersTableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as? UsersTableViewCell

    if(cell == nil) {
        cell = UsersTableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: cellIdentifier)
    }

    if let pfObject = object {
        let otherUser = pfObject as! PFUser
        cell?.userDisplayed = otherUser
        if (cell?.completelyVisible == true) {
            // Video playing
            println("\(cell?.userDisplayed!.username!) is completely visible")
            var video1 = pfObject["video1"] as? PFFile
            let video1URL = NSURL(string: (video1?.url)!)
            objMoviePlayerController = MPMoviePlayerController(contentURL: video1URL)
            objMoviePlayerController.movieSourceType = MPMovieSourceType.Unknown
            objMoviePlayerController.view.frame = (cell?.userVideo1.bounds)!
            objMoviePlayerController.scalingMode = MPMovieScalingMode.AspectFit
            objMoviePlayerController.controlStyle = MPMovieControlStyle.None
            objMoviePlayerController.repeatMode = MPMovieRepeatMode.One
            objMoviePlayerController.shouldAutoplay = true
            cell?.userVideo1.addSubview(objMoviePlayerController.view)
            objMoviePlayerController.prepareToPlay()
            objMoviePlayerController.play()
        } else {
            println("\(cell?.userDisplayed!.username!) is not completely visible")
        }
    }
    return cell
}

由于某些视频确实播放,我怀疑scrollViewDidScroll或checkVisibilityOfCell中的一个或两个函数不正确。任何帮助将不胜感激!

0 个答案:

没有答案