首先,我对IOS编程很陌生。我正在研究一个项目并面临一个问题。
我想以编程方式在“桌面”视图上添加“球”子视图,但是球不会出现。该程序仅显示该表。什么原因?在此先感谢,这是我的文件:
Table.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
//
// 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
Constants.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
答案 0 :(得分:2)
在addBall
方法中,您要将新的Ball
对象添加到self.window
。您应该将其添加到self
。而且您不需要致电bringSubviewToFront:
。