尝试注释MapView并同时加载第二个视图控制器

时间:2015-07-24 03:52:15

标签: ios swift uitableview mkmapview segue

在我的主视图控制器中,我有一个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
}

谢谢。

1 个答案:

答案 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上的+ =和 - =似乎与我希望表格做的相反,但是,这是我需要放置它们以使表格移动我想要的方向的方式。但这似乎违反直觉。

就是这样。我希望这会对某人有所帮助。