objective-c – MPMoviePlayerController添加UIButton以查看带有控件的淡入淡出

objective-c – MPMoviePlayerController添加UIButton以查看带有控件的淡入淡出,第1张

概述我试图将UIButton添加到MPMoviePlayerController的视图以及标准控件.按钮出现在视频上并按预期工作接收触摸事件,但我希望它可以使用标准控件淡入淡出以响应用户触摸. 我知道我可以通过滚动我自己的自定义播放器控件来实现这一点,但它似乎很愚蠢,因为我只是想添加一个按钮. 编辑 如果以递归方式遍历MPMoviePlayerController视图的视图层次结构,最终将进入名为MP 我试图将UIbutton添加到MPMovIEPlayerController的视图以及标准控件.按钮出现在视频上并按预期工作接收触摸事件,但我希望它可以使用标准控件淡入淡出以响应用户触摸.

我知道我可以通过滚动我自己的自定义播放器控件来实现这一点,但它似乎很愚蠢,因为我只是想添加一个按钮.

编辑

如果以递归方式遍历MPMovIEPlayerController视图的视图层次结构,最终将进入名为MPInlineVIDeoOverlay的视图类.您可以轻松地向此视图添加任何其他控件,以实现自动淡入/淡出行为.

虽然有一些问题,但在创建MPMovIEPlayerController并将其添加到视图之前,它有时需要一段时间(在我的经验中可达一秒),然后才能完全初始化并创建它的MPInlineVIDeoOverlay层.因此我必须在下面的代码中创建一个名为controlVIEw的实例变量,因为有时它在运行此代码时不存在.这就是为什么我有最后一段代码,如果没有找到,函数会在0.1秒内再次调用自己.尽管出现这种延迟,我还是注意到界面上出现的按钮有任何延迟.

-(voID)setupAdditionalControls {    //Call after you have initialized your MPMovIEPlayerController (probably vIEwDIDLoad)    controlVIEw = nil;    [self recursiveVIEwTraversal:movIE.vIEw counter:0];    //check to see if we found it,if we dIDn't we need to do it again in 0.1 seconds    if(controlVIEw) {            UIbutton *backbutton = [UIbutton buttonWithType:UIbuttonTypeCustom];            [controlVIEw addSubvIEw:backbutton];    } else {            [self performSelector:@selector(setupAdditionalControls) withObject:nil afterDelay:0.1];    }}-(voID)recursiveVIEwTraversal:(UIVIEw*)vIEw counter:(int)counter {    NSLog(@"Depth %d - %@",counter,vIEw); //For deBUG    if([vIEw isKindOfClass:NSClassFromString(@"MPInlineVIDeoOverlay")]) {            //Add any additional controls you want to have fade with the standard controls here            controlVIEw = vIEw;    } else {            for(UIVIEw *child in [vIEw subvIEws]) {                    [self recursiveVIEwTraversal:child counter:counter+1];            }    }}

这不是最好的解决方案,但我发布它以防其他人试图做同样的事情.如果Apple要更改控件叠加层内部的视图结构或类名,它将会中断.我也假设你没有全屏播放视频(虽然你可以用嵌入式控件全屏播放).我还必须使用此处描述的技术禁用全屏按钮,因为MPInlineVIDeoOverlay视图在按下时会被删除并释放:iPad MPMoviePlayerController – Disable Fullscreen

当您收到上述全屏通知时调用setupAdditionalControls会将其他控件重新添加到UI.

如果有人能提出除了我提出的这个Hackery之外的东西,我会喜欢更优雅的解决方案.

解决方法 我对同一问题的解决方案是:

>将按钮添加为MPMovIEPlayerController视图的子项;
>使用其Alpha属性的动画淡入淡出按钮,并使用适当的持续时间;
>处理播放器控制器的touchesBegan,并使用它来切换按钮的可见性(使用其Alpha);
>使用计时器确定何时再次隐藏按钮.

通过反复试验,我确定匹配(当前)iOS的持续时间是:

>淡入:0.1秒
>淡出:0.2秒
>屏幕上的持续时间:5.0s(每次触摸视图时延伸)

当然这仍然很脆弱;如果内置延迟发生变化,我的看起来会出错,但代码仍会运行.

总结

以上是内存溢出为你收集整理的objective-c – MPMoviePlayerController添加UIButton以查看带有控件的淡入淡出全部内容,希望文章能够帮你解决objective-c – MPMoviePlayerController添加UIButton以查看带有控件的淡入淡出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1086236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存