Reputation: 471
First of all, I am pretty new to IOS programming. I am working on a project and faced an issue.
I want to add a "ball" subview over my "table" view programmatically, however, the ball will not show up. The program is showing only the table. What's the reason? Thanks in advance and here are my files:
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
Upvotes: 1
Views: 67
Reputation: 22701
In your addBall
method, you are adding the new Ball
object to self.window
. You should just add it to self
instead. And you should not need to call bringSubviewToFront:
.
Upvotes: 2