【问题标题】:Creating customized UIView programmatically以编程方式创建自定义 UIView
【发布时间】:2013-07-04 04:58:29
【问题描述】:

我有一个自定义的 UIView,我在其中使用 drawRect: 方法进行一些低级绘图。当我在 XIB 文件中实例化视图时,它工作正常。但是,当我以编程方式实例化它时,事情变得很奇怪,例如,

MyView *view = [[MyView alloc] initWithFrame: rect];

[self.view addSubView: view]; 

似乎每当 drawRect: 方法运行时,结果视图都包含当前绘图与之前调用中制作的一些旧绘图重叠。换句话说,调用drawRect:时似乎还没有清除视图。

【问题讨论】:

  • 您在哪里调用您在问题中发布的代码?也许您正在添加多个视图。
  • 有什么问题?哪个观点不明确?你说的当前图纸是什么意思?
  • 我的应用程序通过定期调用其 setNeedsDisplay 方法来更新视图。每次更新时,都会在 drawRect 方法中绘制一个新图。我的问题是这个新的(或当前的)绘图似乎与以前更新中的一些旧绘图重叠。

标签: ios uiview customizing


【解决方案1】:

让我们在您的 viewDidLoad 方法或任何地方检查此代码。并检查矩形框大小不应为 nill 或 0。

- (void)viewDidLoad
{
    [super viewDidLoad];

    MyView *view = [[MyView alloc] initWithFrame: rect];

    NSLog(@"rect size %@  %@",NSStringFromCGRect(rect.bounds),NSStringFromCGRect(view.bounds));

    view.backGroundCOlor = [UIColor redColor];

    [self.view addSubView: view]; 
}

检查它是否正常工作。

【讨论】:

  • 我的问题没有说我把代码放在哪里,但代码在主视图控制器的 viewDidLoad 方法中。所以它和你上面建议的完全一样(背景颜色除外)。所以它不起作用......
【解决方案2】:

我刚刚发现问题的原因是视图的backgroundColor属性设置为nil。

我想知道这是否是一个错误,因为 backgroudColor=nil 是透明背景的有效值。一种可能的解释是,当在视图的 drawRect 方法中完成自定义绘图时,背景颜色必须不是透明的,即使当前的 UIView 类引用没有详细说明。

为了清楚起见,这就是我所做的:

MyView *view = [[MyView alloc] initWithFrame: rect];
[self.view addSubView: view]; 
self.view.backgroundColor = [UIColor darkGrayColor];

如果有人能给出更好的解释,我将不胜感激。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多