在我的主视图控制器中,我有一个MKMapView和TableView。 tableview使用AlamoFire调用用户信息的API来填充其单元格。
我想要发生什么: 当您选择一个单元格时,第二个容器视图(具有更详细的用户信息)将进入屏幕中查看tableview的部分。同时,地图视图将使用该用户的位置进行注释。
问题: 选择单元格后,第二个容器视图将滑动到屏幕上(好),Map Annotates(好),但信息容器视图再次消失(坏)。通过第二次点击最初选择的单元格,信息容器视图将滑回到屏幕上以保留。我需要摆脱这个双击。
由于某些原因,Map Annotation似乎否定了这个过程。当我注释掉地图注释时,VC过渡工作正常......只需点按一下。
任何想法都会有所帮助。
以下是有问题的代码:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.localTableView.deselectRowAtIndexPath(indexPath, animated: true)
dispatch_async(dispatch_get_main_queue(),{
self.populateInfoContainerView(indexPath.row)
self.mapView.selectAnnotation(self.users[indexPath.row], animated: true)
if(self.userInfoContainerView.frame.origin.x == UIScreen.mainScreen().bounds.size.width){
self.showInfoView(true)
} else {
self.hideInfoView(true)
}
})
}
func showInfoView(animated: Bool){
UIView.animateWithDuration(0.33, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 1.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: ({
self.userInfoContainerView.frame.origin.x = 0
self.localTableView.frame.origin.x = -UIScreen.mainScreen().bounds.size.width
}), completion: { finished in
//animation complete
})
self.infoVisible = true
}
func hideInfoView(animated: Bool){
let xPos = UIScreen.mainScreen().bounds.size.width
if(animated == true){
UIView.animateWithDuration(0.25, animations: ({
self.userInfoContainerView.frame.origin.x = xPos
self.localTableView.frame.origin.x = 0
}), completion: { finished in
//animation complete
})
} else {
self.userInfoContainerView.frame.origin.x = xPos
}
self.infoVisible = false
}
谢谢。
答案 0 :(得分:0)
我相信我找到了答案。我不确定为什么会这样,上面的版本没有,但我会告诉你我的做法与众不同。
我现在正在动画TableView和InfoView的约束。
首先,我按住Ctrl +单击+将约束从我的main.storyboard拖到我的代码中,然后创建一个IBOutlet来设置动画。我还添加了一个let screenWidth
作为我将移动它们的常量。
@IBOutlet weak var infoViewLeadingEdge: NSLayoutConstraint!
@IBOutlet weak var tableViewXCenter: NSLayoutConstraint!
let screenWidth = UIScreen.mainScreen().bounds.size.width
然后我在showInfo()
中替换了上面的代码:
self.userInfoContainerView.frame.origin.x = 0
self.localTableView.frame.origin.x = -UIScreen.mainScreen().bounds.size.width
使用这个新代码:
self.infoViewLeadingEdge.constant -= self.screenWidth
self.tableViewXCenter.constant += self.screenWidth
self.view.layoutIfNeeded()
在我上面的hideInfo()
中,我将其替换为:
self.userInfoContainerView.frame.origin.x = xPos
self.localTableView.frame.origin.x = 0
使用这个新代码:
self.infoViewLeadingEdge.constant += self.screenWidth
self.tableViewXCenter.constant -= self.screenWidth
self.view.layoutIfNeeded()
别忘了self.view.layoutIfNeeded()
。如果您不使用该代码,则动画无法使用。此外,tableViewXCenter上的+ =和 - =似乎与我希望表格做的相反,但是,这是我需要放置它们以使表格移动我想要的方向的方式。但这似乎违反直觉。
就是这样。我希望这会对某人有所帮助。