سؤال

أحاول إضافة أزرار مخصصة إلى اليسار واليمين لعناصر التحكم في الترجيع/اللعب/الأمام القياسية في طريقة عرض mpmoviePlayerController (OS 2.x وما فوق). لقد اكتشفت كيفية إضافتها إلى نافذة اللاعب ، لكنها دائمًا مرئية. هل هناك طريقة لاكتشاف عندما تظهر الضوابط القياسية وتختفي؟

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

المحلول

حسنًا ، حصلت عليه ، اجعل مثل هذا:

BOOL controlsVisible = NO;
for(id views in [[_moviePlayer view] subviews]){
 for(id subViews in [views subviews]){
   for (id controlView in [subViews subviews]){
     controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES);
   }
  }
}
NSLog(@"player controls are visible: %d", controlsVisible);

أين _لاعب الخطوة هو مثيل اللاعب الخاص بك. في أعمق حلقة ، mpfullscreenvideooverlay سيكون على مثيل العرض alpha == 0.0 إذا تم إخفاء عناصر التحكم ، أو alpha 1.0 إذا تم عرض عناصر التحكم. يمكنك إضافة مراقب وإطلاق الأشياء حسب الحاجة. أعلم أنه ليس أنيقًا ولكنه يعمل بالنسبة لي ، لأن Apple لم توثق أي شيء فيما يتعلق بهذه المهمة.

هتافات ...

نصائح أخرى

إجابة CyberCow هي الصواب فقط لإضافة تعديل قليل لجعل الإجابة أكثر دقة.

BOOL controlsVisible = NO;
for(id views in [[self.moviePlayerViewController view] subviews])
{
   for(id subViews in [views subviews])
   {
      for (id controlView in [subViews subviews])
      {
          if ([controlView isKindOfClass:[UIView class]] && ((UIView*)controlView).tag == 1004)
          {
             controlsVisible = ([controlView alpha] <= 0.0) ? (NO) : (YES)               
          }
      }

   }
}

لقد غيرت الحلقة الأكثر داخلية. في الواقع ، 1004 هي علامة عناصر تحكم MpmoviePlayer بحيث ستعمل بشكل أكثر دقة.

انظر إلى خاصية MovieControlMode. يمكنك ضبط mpmoviecontrolmode

خيارات MPMoVieControlMode لعرض عناصر التحكم في تشغيل الأفلام.

typedef enum {
   MPMovieControlModeDefault,
   MPMovieControlModeVolumeOnly,
   MPMovieControlModeHidden
} 

mpmoviecontrolmode ؛

يمكنك أيضًا الاطلاع

قبل iOS3.2
من السهل اكتشاف "عدم الرفض":

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController];

إن اكتشاف التقييم أصعب قليلاً (ربما هناك طريقة أفضل):

...
[moviePlayerController play];
mainTimer = [NSTimer scheduledTimerWithTimeInterval:1/100 target:self selector:@selector(tick) userInfo:nil repeats:YES];

- (void)tick {
  if( [[[UIApplication sharedApplication] windows] count] < 2 ) return;

  moviePlayerWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
  if( moviePlayerWindow ){
    [mainTimer invalidate], mainTimer=nil;
    // here you have moviePlayerWindow
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top