簡體   English   中英

如何以編程方式添加子視圖

[英]How to programmatically add a subview

首先,我對IOS編程很陌生。 我正在做一個項目,遇到了一個問題。

我想以編程方式在“表”視圖上添加“球”子視圖,但是,該球不會顯示。 程序僅顯示表格。 什么原因? 在此先感謝,這是我的文件:

表.m

//
//  Table.m
//  Lines
//
//  Created by Eduard Avetisyan on 1/24/15.
//  Copyright (c) 2015 Eduard Avetisyan. All rights reserved.
//

#import "Table.h"
#import "Constants.h"

@implementation Table


-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if(self)
    {
        [self addBall];
    }
    return self;
}

- (void)addBall
{
    Ball* myBall = [[Ball alloc]init];
    [self.window addSubview:myBall];
    myBall.center = self.window.center;
    [self.window bringSubviewToFront:myBall];
}
- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
    CGContextSetLineWidth(context, 2.0f);

    for (int i = 0;i <= TABLE_LENGTH; i++)
    {

        //draw rows
        CGContextMoveToPoint(context, BORDER_DISTANCE +i * CELL_LENGTH, BORDER_DISTANCE);
        CGContextAddLineToPoint(context, BORDER_DISTANCE + i * CELL_LENGTH, BORDER_DISTANCE + CELL_LENGTH * TABLE_LENGTH);
        CGContextStrokePath(context);

        //draw columns
        CGContextMoveToPoint(context, BORDER_DISTANCE, BORDER_DISTANCE + i * CELL_LENGTH);
        CGContextAddLineToPoint(context, BORDER_DISTANCE + CELL_LENGTH * TABLE_LENGTH, BORDER_DISTANCE + i * CELL_LENGTH);
        CGContextStrokePath(context);
    }

}

@end

//
//  Ball.m
//  Lines
//
//  Created by Eduard Avetisyan on 1/24/15.
//  Copyright (c) 2015 Eduard Avetisyan. All rights reserved.
//

#import "Ball.h"

@implementation Ball

-(instancetype)init
{
    self = [super init];

    if (self) {

        CGRect newFrame = self.frame;

        newFrame.size.width = 50;
        newFrame.size.height = 50;
        [self setFrame:newFrame];

        Colors color = arc4random_uniform(NUMBER_OF_COLORS);
        [self drawBall:color];
    }

    return self;
}


-(void)drawBall:(Colors)color
{
    switch (color) {
        case red:
            self.fillColor = [UIColor redColor].CGColor;
            break;
        case green:
            self.fillColor = [UIColor greenColor].CGColor;
            break;
        case yellow:
            self.fillColor = [UIColor orangeColor].CGColor;
            break;
        case blue:
            self.fillColor = [UIColor blueColor].CGColor;
            break;

        default:
            break;
    }

}

-(void)setFillColor:(CGColorRef)fillColor
{
    _fillColor = fillColor;

    [self setNeedsDisplay];
}


- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, self.fillColor);
    CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);

    CGContextFillEllipseInRect(context, rect);
    CGContextStrokeEllipseInRect(context, rect);

}

@end

常數h

//
//  Constants.h
//  Lines
//
//  Created by Eduard Avetisyan on 1/24/15.
//  Copyright (c) 2015 Eduard Avetisyan. All rights reserved.
//

#ifndef Lines_Constants_h
#define Lines_Constants_h

#define TABLE_LENGTH 10
#define CELL_LENGTH 30
#define BORDER_DISTANCE 5
#define NUMBER_OF_COLORS 4

typedef enum {
    red,
    green,
    yellow,
    blue,
    black,
    orange,
    violet
}Colors;


#endif

addBall方法中,您addBall新的Ball對象添加到self.window 您應該將其添加到self 而且您不需要調用bringSubviewToFront:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM