这个 iOS5+ 项目正在使用情节提要并且 ARC 已打开。
我正在制作一个内部带有“圆圈”的自定义视图(这将代表一次点击,这将只是一个背景图像)并且我需要在内部绘制圆段(我已经在我的 drawRect 中这样做了)代表一个时间跨度(在代码中会更清楚)。
现在你的时间跨度代表一个事件,它来自事件数组,包含事件项(在代码中也更清晰)
现在我想要在圆的顶部绘制按钮,这些按钮需要链接到某些事件。(这可能就像向与 ID 对应的按钮添加标识符一样简单,并在单击时打开显示标题和按钮的注释。所以基本上我希望这些按钮的行为类似于 mapkit 中的地图注释,然后能够单击按钮并转到详细信息页面(我已经制作并用于我的 mapView)(我还想为这些按钮使用自定义图像)
我将如何解决这个问题?
这个问题的重要文件的文件结构是:
Event.h
Event.m
RadarViewController.h
RadarViewController.m
RadarView.h
RadarView.m
时钟的绘制发生在 RadarView.m 的 drawRect 中。在故事板中有一个带有 RadarViewController 类的 UIView,它上面有一个带有 RadarView 类的子类。绘制时钟的是radarView的drawRect(并在那里实现了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;
}
但这不起作用,它不显示