كيف تكتشف عندما تظهر عناصر تحكم iPhone mpmoviePlayer/تختفي؟
-
20-09-2019 - |
سؤال
أحاول إضافة أزرار مخصصة إلى اليسار واليمين لعناصر التحكم في الترجيع/اللعب/الأمام القياسية في طريقة عرض 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
}
}