سؤال

لديّ طريقة عرض بسيطة تنشئ mpmovieplayerviewController عندما يضغط المستخدم على زر ، باستخدام PresentMoviePlayerViewControllerAnimated: الطريقة. تنزلق وحدة تحكم View الجديدة وتظهر مشغل الفيلم ، حتى الآن جيد جدًا.

ومع ذلك ، عند الضغط على الزر ، تنزلق وحدة التحكم في العرض الحالية إلى أسفل ، مما يدل على عرض أبيض قبيح (ربما افتراضي) ، يتجول في أي مكان من نصف ثانية إلى بضع ثوان ، حتى يتم عرض وحدة التحكم في عرض الفيلم. يبدو أنه يعتمد على اتصال الشبكة الخاص بي ، كما لو أن وحدة التحكم في عرض الفيلم تقوم بتنزيل أجزاء من الفيلم قبل عرض المشغل.

هل أفعل شيئًا خاطئًا ، أو كيف يمكنني العمل حول هذا؟ تفضل حقًا إظهار وحدة التحكم في عرض الفيلم مباشرة ، ربما حتى بدون انزلاق وحدة التحكم السابقة في العرض التي تحمل زر التشغيل ، ولكن لا تزال متحركة مثل وحدة تحكم العرض الوسائط.

شكرًا!

كريستوف

هل كانت مفيدة؟

المحلول 2

انتهى بي الأمر فقط ضبط خلفية العرض إلى الأسود. لا يصلح التأخير ، ولكنه يجعله يبدو أجمل:

  theMovieVC.view.backgroundColor = [UIColor blackColor];

نصائح أخرى

كان الحل هو بدء وحدة التحكم في عرض اللاعب عند إنشاء عرض الأصل ، ثم اتصل prepareToPlay على ال moviePlayer داخله. هذا يزيل الكمون عند الضغط على زر التشغيل و (على ما أظن) ينقله عندما يصل المستخدم إلى عرض الوالدين الذي يمكنه تشغيل الفيلم منه.

تحرير: هذا يزيل التأخير ، ولكن لسبب ما ، تهيئة وحدة تحكم عرض الفيلم أيضًا عند تحميله عند تحميله ، لذلك ليس حلًا جيدًا.

هذا ما أفعله من أجل iOS> 3.2:

- (void) play {
    mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];

    if ([mMoviePlayer respondsToSelector:@selector(loadState)]) 
    {
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePreloadDidFinishIOS32:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification 
                                                   object:nil];


        [mMoviePlayer prepareToPlay];
        [mMoviePlayer play];
        mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        [mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
        [mMoviePlayer setBackgroundColor:[UIColor clearColor]];
    }
}

و

- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
    // Remove observer
    [[NSNotificationCenter  defaultCenter] 
     removeObserver:self
     name:MPMoviePlayerContentPreloadDidFinishNotification
     object:nil];

    self.view = mMoviePlayer.view;
}

وبالتالي في الحمولة ViewDidload ، يمكنك إنشاء ما تريده (UiActivityIndicatorView على سبيل المثال). سيتم استبدال وحدة التحكم في العرض إلا عند الانتهاء من التحميل المسبق.

ألاحظ نفس المشكلة في تطبيقي. أي شخص لديه اقتراحات لتجنب هذه القضية؟

في حالتي ، أنا أدفع mpmovieplayerviewController إلى واجهة المستخدم باعتبارها نافذة منبثقة.

// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];

// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top