如何使用动画切换视图 - 目标 c.



我有一个视图控制器,它有一个表视图和一个地图视图,只有一个是可见的。我还有一个带有两个按钮(列表和地图)的分段控制的工具栏

如何在表视图和地图视图之间切换? 工具栏将保持锁定状态,而不会随视图进行动画处理,这一点很重要。

经过更多思考,我找到了解决方案,为表视图和地图视图添加另一个视图作为容器视图。
这样我可以做到:

   [UIView transitionWithView:self.someContainerView
                     duration:1.0
                     options:UIViewAnimationOptionTransitionFlipFromLeft 
                     animations:^{
                         self.mapView.hidden   = !showingMapView;
                         self.tableView.hidden = showingMapView;
                     } completion:nil
    ];  

无需翻转工具栏

您可以使用UIView动画过渡,传递过渡视图的超级视图:

- (IBAction)segmentIndexChanged {
   BOOL showingMapView = (BOOL)self.segmentedControl.selectedSegmentIndex;
   [UIView transitionWithView:self.view
                     duration:1.0
                      options:UIViewAnimationOptionTransitionFlipFromLeft 
                   animations:^{
     self.mapView.hidden   = !showingMapView;
     self.tableView.hidden = showingMapView;
   } completion:nil];
}

尝试以下代码来显示表格和地图视图:

隐藏分段控件索引中的地图视图和表视图已更改:

- (IBAction)segmentedControlIndexChanged {
    switch (self.segmentedControl.selectedSegmentIndex) {
        case 0: //it's show tableview
            [UIView transitionWithView: self.view
                              duration:1.0 
                               options:UIViewAnimationOptionTransitionFlipFromLeft
                            animations:^{
                                self.mapView.hidden   = YES;
                                self.tableView.hidden = NO; }
                            completion:nil];
              break;
        case 1: //it's show mapview
            [UIView transitionWithView:self.view
                              duration:1.0
                               options:UIViewAnimationOptionTransitionFlipFromLeft
                            animations:^{
                                self.mapView.hidden   = NO;
                                self.tableView.hidden = YES; }
                            completion:nil];
            break;
        default:
              break;
    }
}

最新更新