Objective c 将视图一分为二

Objective c 将视图一分为二,objective-c,ipad,Objective C,Ipad,我对所使用的词汇不是很熟悉,但我会尽力解释我想做的事情 我想创建一个iPad应用程序,它有一个导航控制器作为根控制器(是的,我知道这违背了苹果关于创建扁平层次结构的建议)。当应用程序加载时,用户将输入一些信息,然后按下“下一步”按钮。我知道如何创建导航控制器,这是下一页我有一个困难的时间 在下一页中,我将尝试创建一个一分为二的视图(而不是SplitViewController)。左侧有一个视图控制器,右侧有另一个视图控制器(两者相互独立)。类似于有两个iFrame的网站 有人能给我指一下正确的方

我对所使用的词汇不是很熟悉,但我会尽力解释我想做的事情

我想创建一个iPad应用程序,它有一个导航控制器作为根控制器(是的,我知道这违背了苹果关于创建扁平层次结构的建议)。当应用程序加载时,用户将输入一些信息,然后按下“下一步”按钮。我知道如何创建导航控制器,这是下一页我有一个困难的时间

在下一页中,我将尝试创建一个一分为二的视图(而不是SplitViewController)。左侧有一个视图控制器,右侧有另一个视图控制器(两者相互独立)。类似于有两个iFrame的网站


有人能给我指一下正确的方向吗?我真的不知道该搜索什么。

如果UISplitViewController无法剪切它,或者因为您在iPhone上而无法使用它,那么有很多不同的方法可以做到这一点:

  • 创建一个parentController,该控制器分配/初始化两个子ViewController,然后将其视图添加为子视图。这是我在需要的时候使用的方法,但我应该警告,苹果公司在未来几年建议不要这样做
  • 创建负责左侧的parentController,但它分配/初始化负责右侧的子viewController,并将其视图添加为子视图。和上面的警告一样,苹果建议不要这样做
  • 与上面类似,但使用苹果推荐的方法,让子控制器子类NSObject而不是UIViewController。给你
  • 将所有这些都塞进一个负责所有事情的怪物viewController中。如果您继承的是旧的iOS代码,那么这是最常用的方法(在我看来是最糟糕的)

  • 我个人更喜欢第一种、第二种或第三种方法,因为它可以更好地分离关注点,实现良好的封装,从而使代码更干净、更易于维护。我还发现,如果稍后我们将流从拆分样式视图更改为两个不同的屏幕,则各个ViewController完全可重用,因为它们封装良好。

    我制作了TUSplitSyncScrollView,如下图所示

    在这段代码中,我使用KVO观察另一个窗口的行为,如下所示:

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
    {
        if (keyPath == @"observedPresentScale") {
            // 自身のzoomScaleに監視しているobservedPresentScaleの値を代入する
            // まず拡大縮小可能にする
            self.maximumZoomScale = 1000.0;
            self.minimumZoomScale = 0.001;
            self.zoomScale = [change[@"new"] floatValue];
            // ここで拡大縮小禁止にする
            self.maximumZoomScale = self.zoomScale;
            self.minimumZoomScale = self.zoomScale;
            printf("zoomScale = %f\n", self.zoomScale);
        }
        else if (keyPath == @"observedContentOffsetY") {
            self.contentOffset = CGPointMake(self.contentOffset.x, [change[@"new"] floatValue]);
        }
    }
    
    这两种观点互相观察

    int opt = NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew;
    
    // rightSplitedScrollViewをleftSplitedScrollViewのオブザーバにする
    [leftSplitedScrollView addObserver:rightSplitedScrollView forKeyPath:@"observedPresentScale" options:opt context:NULL];
    [leftSplitedScrollView addObserver:rightSplitedScrollView forKeyPath:@"observedContentOffsetY" options:opt context:NULL];
    
    // leftSplitedScrollViewをrightSplitedScrollViewのオブザーバにする
    [rightSplitedScrollView addObserver:leftSplitedScrollView forKeyPath:@"observedContentOffsetY" options:opt context:NULL];
    //    [rightSplitedScrollView addObserver:leftSplitedScrollView forKeyPath:@"observedPresentScale" options:opt context:NULL];
    

    您可以从这里运行实际项目:

    听起来像
    SplitViewController
    。您可能还希望看到导航控制器中不能使用
    分段EduiControl
    拆分视图控制器
    。然后您应该添加两个UI2视图并添加一个滚动视图(作为每个UIView的子视图。我认为,如果我错了,请纠正我,但这两个视图将由同一个控制器管理?好吧,考虑到每个视图都不相关(除了在同一屏幕上),并且遵循“关注点分离”的思想,这将更有意义(对我来说)每个视图都有自己的控制器。也许我很奇怪:P