如何将UI按钮添加到自定义视图(自定义drawRect)

时间:2012-07-20 13:30:20

标签: iphone objective-c ios5 drawrect

此iOS5 +项目正在使用故事板,ARC已启用。

我正在制作一个自定义视图,里面有一个'圆圈'(这将代表一个点击,这只是一个背景图像),我需要在里面绘制圆圈段(我已经在我的drawRect中做了)表示时间跨度(代码中会更清晰)。

现在,timepans代表一个事件,它来自事件数组,持有事件项(代码也更清晰)

现在我想要在circlesegments上面绘制按钮,这些按钮需要链接到某些事件。 (这可以像对应于ID的按钮添加标识符一样简单,并且当单击时打开显示标题和按钮的注释。 基本上我希望这些按钮的行为类似于mapkit中的地图注释,然后能够单击按钮并进入详细页面(我已经制作了这个按钮并将其用于我的mapView) (我也想为这些按钮使用自定义图像)

我该如何解决这个问题?

此命令的重要文件的文件结构是:

Event.h
Event.m
RadarViewController.h
RadarViewController.m
RadarView.h
RadarView.m

时钟的绘制发生在RadarView.m的drawRect中 在故事板中有一个带有RadarViewController类的UIView,它上面有一个子类,带有一类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;
}

但这不起作用,它没有显示

0 个答案:

没有答案