触发drawRect重绘视图的按钮
Posted
技术标签:
【中文标题】触发drawRect重绘视图的按钮【英文标题】:Button to trigger drawRect to redraw a view 【发布时间】:2013-02-26 08:11:34 【问题描述】:我有一个带有子视图的 VC。在subview level
我有一个按钮。我希望按钮导致视图被更新。
IBAction
代码在 VC 中。它当前所做的只是切换BOOL
值。
返回子视图drawRect:方法是测试BOOL
并相应改变视图的代码。
我的观察是,当按下按钮时,IBAction 代码运行,切换BOOL
,但drawRect:
方法没有被调用。
我尝试手动调用 drawRect (不好的做法,没有工作)。我尝试调用 setNeedsDisplay 但这也不起作用(无法弄清楚如何引用以编程方式创建的子视图)。
欢迎提出建议。
IBAction 代码很简单,但包含在下面:
- (IBAction)rotateWindowButtonWasPressed:(id)sender
// just flip the boolean here. Need to make the code change in drawRect: in top2View.m
if ([myGlobals gWinVertical])
[myGlobals setGWinVertical:NO];
else
[myGlobals setGWinVertical:YES];
// Hoping this would force a redraw, but bounds have to change...:(
//_top2ViewOutlet.contentMode = UIViewContentModeRedraw;
【问题讨论】:
更漂亮的快捷方式:[myGlobals setGWinVertical:![myGlobals gWinVertical]]; 【参考方案1】:要发出 drawRect 调用,请在您更改的视图上调用 setNeedsDisplay
。操作系统将在其上调用 drawRect 并自动影响重叠视图。
我认为你的情况
[self.view setNeedsDisplay]
【讨论】:
【参考方案2】:不确定发生了什么 - 上面有一个答案解决了我的问题,但现在它消失了?无论如何 - 答案是以编程方式创建按钮,然后我可以在 drawRect: 所在的子视图级别包含该方法,并使用 setNeedsDisplay 重新绘制屏幕。这与使用 IB 并在 VC 级别拥有 IBAction 代码。
【讨论】:
以上是关于触发drawRect重绘视图的按钮的主要内容,如果未能解决你的问题,请参考以下文章
drawRect & layoutSubviews 调用时间
UIView的layoutSubviews和drawRect方法何时调用