Разделив взгляд на два - PullRequest
       2

Разделив взгляд на два

1 голос
/ 04 августа 2011

Я не очень хорошо знаком с использованным словарем, но сделаю все возможное, чтобы объяснить, что я пытаюсь сделать.

Я хотел бы создать приложение для iPad, в котором в качестве корневого контроллера используется контроллер навигации (да, я знаю, что это противоречит рекомендациям Apple по созданию плоской иерархии). Когда приложение загружается, пользователь вводит некоторую информацию и затем нажимает кнопку «Далее». Я знаю, как создать контроллер навигации, именно на этой следующей странице мне трудно.

На этой следующей странице я пытаюсь создать представление, разделенное пополам (НЕ SplitViewController). Слева находится контроллер вида, а справа - другой контроллер вида (оба независимы друг от друга). Аналогично веб-сайту с двумя фреймами.

Может кто-нибудь указать мне правильное направление? Я действительно даже не уверен, что искать.

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

В тех случаях, когда UISplitViewController не обрезает его или вы не можете использовать его, потому что вы на iPhone, есть несколько различных способов сделать это:

  1. Создать parentControllerкоторый выделяет / вводит два дочерних viewControllers, а затем добавляет их представления в качестве подпредставлений.Это подход, который я использую, когда мне нужно, но я должен предупредить, что Apple советует против него в разделе Примечание Руководства по программированию View Controller
  2. Создайте parentController, который отвечает за, скажем, левую сторону, но он выделяет / вводит дочерний viewController, который отвечает за правую сторону, и добавляет его представление в качестве подпредставления.То же самое предостережение, что и выше, Apple советует против этого.
  3. Аналогично вышеописанному, но используйте рекомендованный Apple подход, предусматривающий использование подклассов подкласса NSObject вместо UIViewController.Вот хороший пост в блоге на эту тему .
  4. Скомбинируйте все это в один монстр viewController, который отвечает за все.Это наиболее распространенный подход, который вы можете использовать, если наследуете старый код iOS (и, на мой взгляд, худший).

Я лично предпочитаю первый, второй или третий подходы, так как онприводит к лучшему разделению проблем, хорошей инкапсуляции и, следовательно, более чистому и легкому в обслуживании коду.Я также обнаружил, что позже, если мы изменим потоки, чтобы отойти от представления с разделенным стилем на два разных экрана, отдельные контроллеры view будут полностью использованы повторно, потому что они хорошо инкапсулированы.

0 голосов
/ 08 августа 2013

Я сделал TUSplitSyncScrollView, как показано на картинках ниже.

enter image description here enter image description here enter image description here

В этом коде я использовал 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];

Вы можете запустить реальный проект отсюда: https://github.com/weed/TUSplitSyncScrollView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...