在 UIView 中绘制以及 addSubview

Posted

技术标签:

【中文标题】在 UIView 中绘制以及 addSubview【英文标题】:draw as well as addSubview in a UIView 【发布时间】:2010-12-09 13:08:10 【问题描述】:

嗨 我想使用 Interface Builder 在 UIView 上添加两个按钮,并在这两个按钮之间画一条线。这怎么可能?请建议。谢谢

【问题讨论】:

【参考方案1】:

不使用drawrect的一个简单选项是在两个按钮之间放置一个薄的UIView。将视图的背景颜色设置为所需的线条颜色。

编辑: 您仍然可以使用瘦 UIView 并根据需要切换其可见性。 如果您仍想绘制线条,则可能需要创建自定义 UIView。

@interface CustomView : UIView 
    UIButton *button1;
    UIButton *button2;

@end

@implementation CustomView

- (id) initWithFrame:(CGRect)frame 
    if (self = [super initWithFrame:frame]) 
        UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn1.frame = CGRectMake(20, 5, 80, 30);
        [btn1 setTitle:@"Button1" forState:UIControlStateNormal];
        [btn1 addTarget:self action:@selector(buttonPressed:) 
                forControlEvents:UIControlEventTouchUpInside];
        button1 = btn1;
        [self addSubview:btn1];

        UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn2.frame = CGRectMake(20, 60, 80, 30);
        [btn2 setTitle:@"Button2" forState:UIControlStateNormal];
        [btn2 addTarget:self action:@selector(buttonPressed:) 
                forControlEvents:UIControlEventTouchUpInside];
        button2 = btn2;
        [self addSubview:btn2];
    
    return self;


-(void)drawRect:(CGRect)rect

    CGContextRef context = UIGraphicsGetCurrentContext();
    if (button1.selected)
        CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
    else
        CGContextSetRGBStrokeColor(context, 0.0, 1.0, 0.0, 1.0);
    CGContextSetLineWidth(context, 1.0);
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, 10.0, 45.0);
    CGContextAddLineToPoint(context, 150.0, 45.0);
    if (button1.selected)
    
        CGContextAddLineToPoint(context, 180.0, 35.0);      
    
    CGContextDrawPath(context, kCGPathStroke);


-(void)buttonPressed:(UIButton *)button

    button1.selected = !button1.selected;
    button2.selected = !button2.selected;
    [self setNeedsDisplay];


@end

【讨论】:

这是一个不错的选择,但我想分部分划线。基本上,当一个按钮处于选中状态而另一部分处于正常状态时,绘制线条的一部分,否则不绘制,其他部分保持原样。反之亦然 用更接近您的描述的内容更新了示例。 感谢您提供的示例,我认为这样就可以了。如果我遇到任何困难,我会发表评论,否则我会将其标记为答案。再次感谢。

以上是关于在 UIView 中绘制以及 addSubview的主要内容,如果未能解决你的问题,请参考以下文章

addSubView - 在 UIView 中添加一个按钮也会为其 SuperView 添加相同的按钮

当前uiview的addSubView

使用addSubview将UIView移动到其他UIView中

在 addSubview 期间奇怪的重复 UIView

iOS 7 addSubview 为我的 UIView 添加了额外的长度,这是为啥呢?

UIWindow 和 UIView addSubview 问题