Как вы помещаете нормальный элемент управления в NSView? - PullRequest
0 голосов
/ 11 мая 2009

Что я на самом деле пытаюсь сделать, так это поместить WebKitView в ScreenSaver (который наследует NSView). Я совершенно новичок в MacOS X и Cocoa (но я очень хорошо знаком с Objective-C и использовал некоторые части GNUStep). Нужно ли выкладывать? Я хочу показать только один элемент управления во всем NSView.

Ответы [ 3 ]

4 голосов
/ 11 мая 2009

В вашем методе initWithFrame:isPreview: создайте WebView в обычным способом , затем отправьте себе сообщение addSubview:, передавая веб-представление:

webView = [[WebView alloc] initWithFrame:frame];
[self addSubview:webView];

Если вам интересно, какой прямоугольник вы должны передать в качестве фрейма WebView, прочитайте View Programming Guide . Кроме того, не забудьте выпустить webView в dealloc (или автоматически выпустить его в initWithFrame:isPreview:).

Как только у вас появится веб-представление, вам нужно загрузить в него страницу. Установите подходящий длительный интервал анимации (не менее пары секунд) и загрузите страницу в animateOneFrame:

- (void) animateOneFrame {
    [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]];
}

Вы также можете обработать WebViewProgressFinishedNotification и отложить повторную загрузку веб-представления, пока это не произойдет (чтобы компенсировать медленные или пропитанные соединения). Вы сделаете это с переменной экземпляра, для которой вы установите YES в initWithFrame:isPreview: и в вашем методе-обработчике уведомлений, а также протестируете и установите NO в animateOneFrame:

- (void) animateOneFrame {
    if (hasFinished) {
        [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com/"]]];
        hasFinished = NO;
    }
}
0 голосов
/ 09 июля 2009

Вы также можете не слишком беспокоиться о интервале анимации, позвонив по номеру

[self stopAnimation];

в конце вашего animateOneFrame метода.

0 голосов
/ 11 мая 2009
[aScreenSaverView addSubview:aWebKitView];

Но зачем добавлять UIWebView в экранную заставку, если вы можете просто заставить UIWebView работать в полноэкранном режиме самостоятельно? Представлять иерархии представлений там, где они не нужны, не очень хорошая идея, поскольку это увеличивает обработку, необходимую для отображения интерфейса.

...