Как добавить кнопки UIB в мой пользовательский вид (cutom drawRect)
Этот проект iOS5+ использует раскадровку, и ARC включен.
Я делаю собственный вид с "кругом" внутри (который будет повторять щелчок, это будет просто фоновое изображение), и мне нужно нарисовать внутри сегменты круга (что я уже делаю в моем drawRect), которые представляют временной интервал (это будет яснее в коде).
Теперь промежутки времени представляют событие, которое приходит из массива событий и содержит элементы события (также более понятные в коде)
Теперь я хочу нарисовать кнопки поверх сегментов круга, и эти кнопки должны быть связаны с определенными событиями. (это может быть так же просто, как добавить идентификатор к кнопкам, соответствующим идентификатору, и при нажатии открыть аннотацию, показывающую заголовок и кнопку. Поэтому в основном я хочу, чтобы эти кнопки вели себя как аннотации карты из mapkit, а затем могли нажмите кнопку и перейдите на страницу сведений (которую я уже сделал и которую я использую для своего mapView) (я также хотел бы использовать для этих кнопок пользовательское изображение)
Как бы я занялся этим?
Файловая структура для важных файлов этой очереди:
Event.h
Event.m
RadarViewController.h
RadarViewController.m
RadarView.h
RadarView.m
Рисование часов происходит в drawRect RadarView.m В раскадровке есть UIView с классом RadarViewController, и у него есть подкласс с классом RadarView. Это drawRect из radarView, который рисует часы (и там реализована функция drawRect.)
Я могу получить доступ к массиву событий по одиночке (будет ясно в коде.)
----- кодирование -----
Это моя текущая функция drawRect:
RadarView.m
- (void) drawRect:(CGRect)dirtyRect{
CGRect bounds = [self bounds];
CGPoint center;
center.x = (bounds.origin.x + bounds.size.width)/2.0;
center.y = center.x;
// Set context being drawn upon
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor blackColor] setStroke];
CGContextAddArc(context, center.x, center.y, center.x, 0, 2*M_PI, YES);
CGContextStrokePath(context);
SingletonManager *sharedManager = [SingletonManager sharedManager];
Event *tmp;
double radius;
double startRad;
double endRad;
if(currentLocation == nil){
currentLocation = [sharedManager currentLocation].location;
}
for(int i = 0; i < [sharedManager.eventsManager count]; i++){
tmp = [sharedManager.eventsManager objectAtIndex:i];
CLLocation *loc = [[CLLocation alloc] initWithLatitude:tmp.coordinate.latitude longitude:tmp.coordinate.longitude];
CLLocationDistance distance = [currentLocation distanceFromLocation:loc];
if(distance>0){
while(distance > 400.0){
distance -= 400.0;
}
radius= distance / 400.0;
radius *= center.y;
[[UIColor redColor] setStroke];
CGContextSetLineWidth(context, 5);
CGContextSetAlpha(context, 0.6);
startRad = [self getRadians:tmp.start];
endRad = [self getRadians:tmp.einde];
CGContextAddArc(context, center.x, center.y, radius, startRad, endRad, YES);
CGContextStrokePath(context);
}
}
}
-- ОБНОВИТЬ --
Что-то, что я хотел попробовать в RadarView, было:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog(@"This is called <3");
UIButton *btn= [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(0, 0, 25, 25);
btn.backgroundColor = [UIColor clearColor];
[btn setTitle:@"test" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:btn];
}
return self;
}
Но это не работает, это не отображает