因此,一次只显示一个视图,问题是当我在视图之间切换时,应用程序不显示新状态,直到我手动调整窗口大小!
我搜索了这个问题,并提供了多个解决方案,但没有任何对我有用:
[myVIEw setNeedsdisplay:YES];[myVIEw display];[[myVIEw.window contentVIEw] setNeedsdisplay:YES];[mySubVIEw1 setHIDden:YES]; || [mySubVIEw1 removeFromSuperVIEw];
我甚至将myVIEw定义为Outlet,但没有任何效果.
这是我的代码
if (appState == 1) { [self.splitVIEw setFrameSize:CGSizeMake(self.splitVIEw.frame.size.wIDth,self.vIEw.frame.size.height - 250)]; [self.mySubVIEw1 setHIDden:NO]; [self.mySubVIEw2 setHIDden:YES]; [self.mySubVIEw2 removeFromSupervIEw]; [self.mySubVIEw1 addSubvIEw:self.inCallVIEw];}else{ [self.splitVIEw setFrameSize:CGSizeMake(self.splitVIEw.frame.size.wIDth,self.vIEw.frame.size.height - 70)]; [self.mySubVIEw1 setHIDden:YES]; [self.mySubVIEw2 setHIDden:NO]; [self.mySubVIEw1 removeFromSupervIEw]; [self.mySubVIEw2 addSubvIEw:self.chatheaderVIEw];}// I need to redraw here[self.vIEw setNeedsdisplay:YES];[self.mySubVIEw1 setNeedsdisplay:YES];[self.mySubVIEw2 setNeedsdisplay:YES];// and nothing happened until I resize my window manually解决方法 我发现它,代码很好,无需调用任何重绘方法,唯一的问题任何UI *** 作都需要在MAIN线程中完成
所以最终的代码是:
dispatch_async( dispatch_get_main_queue(),^{ if (appState == 1) { [self.splitVIEw setFrameSize:CGSizeMake(self.splitVIEw.frame.size.wIDth,self.vIEw.frame.size.height - 250)]; [self.mySubVIEw1 setHIDden:NO]; [self.mySubVIEw2 setHIDden:YES]; } else { [self.splitVIEw setFrameSize:CGSizeMake(self.splitVIEw.frame.size.wIDth,self.vIEw.frame.size.height - 70)]; [self.mySubVIEw1 setHIDden:YES]; [self.mySubVIEw2 setHIDden:NO]; }});
多谢你们.
总结以上是内存溢出为你收集整理的objective-c – 强制NSView以编程方式重绘全部内容,希望文章能够帮你解决objective-c – 强制NSView以编程方式重绘所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)