Остановите и запустите видео в UIScrollView - PullRequest
2 голосов
/ 01 декабря 2011

Я играю с этим уже целый день и натолкнулся на кирпичную стену.

Я хочу получить UIScrollView, который показывает серию видео, по которым пользователь может пролистать.Настройка UIScrollView в порядке, и каждый элемент в нем (я называю их MenuItems) является подклассом UiViewController, который содержит и управляет всеми настройками MPMoviePlayerController и т. Д.

IОднако обнаружил, что вы можете иметь только один MPMoviePlayerController в окне, играя одновременно.

Итак, я подумал, что лучший способ справиться с этим - это иметь доступные методы для каждого MenuItem, stopVideo и startVideo что я бы активировал, поскольку каждый пункт меню стал «фокусом» UiScrollView (я успешно закодировал делегат, чтобы он захватывал событие прокрутки и определял, какая страница находится в центре просмотра прокрутки).

Проблема в том, что я не могу понять, как получить доступ к объектам MenuItem в UiScrollView.

У меня есть следующий код в делегате UIScrollView, чтобы сделать это:

- (void)scrollViewDidScroll:(UIScrollView *)sView {

//establish what page we're on
static NSInteger previousPage = 0;
MenuItem *currentMenuItem;
MenuItem *previousMenuItem;

CGFloat pageWidth = sView.frame.size.width;
float fractionalPage = sView.contentOffset.x / pageWidth;
NSInteger page = lround(fractionalPage);
if (previousPage != page) {
    //firstly, get the previous page and stop the video
    previousMenuItem = [sView.subviews objectAtIndex:previousPage];
    previousMenuItem = [previousMenuItem nextResponder];
    [previousMenuItem hideVideo];

    //[previousMenuItem release];

    //page has changed, get the new current page and start the video
    currentMenuItem = [sView.subviews objectAtIndex:page];
    currentMenuItem = [currentMenuItem nextResponder];
    [currentMenuItem showVideo];


    //[currentMenuItem release];

    previousPage = page;
}

}

Вызваны методы showVideo и hideVideo, но я получаю другие ошибки (например, я не могу инициализировать MPMoviePlayerController внутри MenuItem безSIGABRT ошибка).

Я думаю, что моя методология яздесь недостатки или что есть более простой подход?Вся помощь оценена!

Большое спасибо.

1 Ответ

0 голосов
/ 20 июня 2012

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

Я думаю, что это связано с распределением памяти дляпроигрыватели фильмов.

Я включил этот код в мой файл .h

@interface VideoInstructionViewController : UIViewController <UIScrollViewDelegate>
{
    MPMoviePlayerController *player0;
    MPMoviePlayerController *player1;
    MPMoviePlayerController *player2;    
}

, чтобы проигрыватели фильмов были глобальными, а затем просто включили этот код в мой файл .m.

player0 = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];
player1 = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];
player2 = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];

Остальная часть вашего кода была очень полезной, я думаю, что это надежная методология, спасибо!

...