xcode – UIScrollView在添加新子视图时中断

xcode – UIScrollView在添加新子视图时中断,第1张

概述我很擅长编写iOS平台和目标C.我正在编写一个简单的iPhone应用程序,利用故事板,通过嵌入在UIScrollView中的UI ImageView显示一个高png文件,旁边的按钮将播放电影. 我的问题是,当电影完成/退出并返回到原始屏幕时,UIScrollView中的滚动不起作用.我已经确定了“原因”.当我将MPMoviePlayerViewController object.view添加到se 我很擅长编写iOS平台和目标C.我正在编写一个简单的iPhone应用程序,利用故事板,通过嵌入在UIScrollVIEw中的UI ImageVIEw显示一个高png文件,旁边的按钮将播放电影.

我的问题是,当电影完成/退出并返回到原始屏幕时,UIScrollVIEw中的滚动不起作用.我已经确定了“原因”.当我将MPMovIEPlayerVIEwController object.vIEw添加到self.vIEw子视图时,会发生这种情况.但我不确定如何纠正这个问题.这是我的提炼代码:

.h文件

@interface StuffVIEwController : UIVIEwController @property (strong,nonatomic) IBOutlet UIImageVIEw *imageVIEw;@property (strong,nonatomic) IBOutlet UIScrollVIEw *scrollVIEw;-(IBAction) playMovIE;-(voID) movIEPlayBackDIDFinish:(NSNotification*)notification;@end

.m文件

-(voID) vIEwDIDLoad {    self.imageVIEw.image = [UIImage imagenamed:@"image.png"];}-(voID) vIEwDIDAppear:(BOol)animated {    self.scrollVIEw.contentSize = self.imageVIEw.image.size;}-(voID) playMovIE {    NSURL *movIEURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]                                         pathForResource:@"movIETitle" ofType:@"mp4"]];    MPMovIEPlayerController *movIEPlayer = [[MPMovIEPlayerController alloc]                                                 initWithContentURL:movIEURL];       [[NSNotificationCenter defaultCenter] addobserver:self                                        selector:@selector(movIEPlayBackDIDFinish:)                                            name:MPMovIEPlayerPlaybackDIDFinishNotification                                          object:movIEPlayer];    [movIEPlayer setMovIESourceType:MPMovIESourceTypefile];    [[self vIEw] addSubvIEw:movIEPlayer.vIEw];   //SCRolliNG BREAKS HERE    [movIEPlayer setFullscreen:YES];    [movIEPlayer play];}-(voID)movIEPlayBackDIDFinish: (NSNotification*)notification {    MPMovIEPlayerController *movIEDone = [notification object];    [[NSNotificationCenter defaultCenter] removeObserver:self];    [movIEDone.vIEw removeFromSupervIEw];    [movIEDone setFullscreen:NO];}

我已经通过评论部分确定了罪魁祸首,就像我说的那样,滚动“锁定”在“[[self vIEw] addSubvIEw:movIEPlayer.vIEw];”直到我导航到另一个视图然后回来之前,并没有恢复.

对此的任何和所有帮助将不胜感激.

编辑:我发现了一个有趣的皱纹,可能有助于发现潜在的问题.

我一直在使用MPMovIEPlayerController.但是,在切换到MPMovIEPlayerVIEwController时,一些有趣的事情一直在发生.

这是改变了 – (voID)playMovIE

-(voID) playMovIE {   self.scrollVIEw.contentOffset = CGPointZero;   NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]                                    pathForResource:totalTitle ofType:@"mp4"]];   MPMovIEPlayerVIEwController *playerController =  [[MPMovIEPlayerVIEwController alloc] initWithContentURL:url];   [self presentMovIEPlayerVIEwControllerAnimated:playerController];   playerController.movIEPlayer.movIESourceType = MPMovIESourceTypefile;   [playerController.movIEPlayer play];   playerController = nil;}

有趣的是,UIScrollVIEw仍然可以正常工作,如果它完全向下滚动它将无法再从电影开始时的位置向上滚动.我通过在playMovIE的开头添加self.scrollVIEw.contentOffset = CGPointZero来修复此问题,以告诉scrollVIEw移动到顶部(因此上面没有任何内容可以滚动回去).我假设在vIEwDIDAppear中的代码中添加某种if语句会使scrollVIEw.contentSize不能重新执行,这可能会解决无法向上滚动的问题,但是我喜欢它的“清洁度”顶端.

最后一个问题.像这样使用MPMovIEPlayerVIEwController在MPMovIEPlayerVIEwController * playerController = [[MPMovIEPlayerVIEwController alloc] initWithContentURL:url]时,会在我的调试器中d出一些有趣的错误.行已执行.它们如下:

Oct 25 10:25:51 Compy.local Appname[14590] <Error>: CGContextSaveGState: invalID context 0x0 Oct 25 10:25:51 Compy.local Appname[14590] <Error>: CGContextClipToRect: invalID context 0x0Oct 25 10:25:51 Compy.local Appname[14590] <Error>: CGContextTranslateCTM: invalID context 0x0Oct 25 10:25:51 Compy.local Appname[14590] <Error>: CGContextDrawShading: invalID context 0x0Oct 25 10:25:51 Compy.local Appname[14590] <Error>: CGContextRestoreGState: invalID context 0x0

它似乎没有破坏任何东西.然而,当谈到错误的错误陈述时,我倾向于成为完美主义者.我已经对这些错误进行过一些研究,但是我没有找到任何合适的东西可以在这种情况下发挥作用.

感谢目前为止所有的帮助!我再一次感谢任何和所有帮助.

解决方法 你确定从supervIEw中删除了所有内容吗?此外,您可能会尝试替换

MPMovIEPlayerController *movIEDone = [notification object];

MPMovIEPlayerController *movIEDone = (MPMovIEwPlayerController *)[notification object];

并且还添加

movIEDone = nil;

要确保从superVIEw中完全删除MPMovIEPlayerController,请尝试在视频完成播放后按下视图上的按钮(在添加MPMovIEPlayerController之前创建)并查看它是否会触发.导航控制器必须以模态方式呈现您的MPMovIEwPlayerController或进行推送.如果是模态显示,请在播放结束时尝试将其解除.

总结

以上是内存溢出为你收集整理的xcode – UIScrollView在添加新子视图时中断全部内容,希望文章能够帮你解决xcode – UIScrollView在添加新子视图时中断所遇到的程序开发问题。

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

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

原文地址: http://www.outofmemory.cn/web/1008163.html

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

发表评论

登录后才能评论

评论列表(0条)

保存