0

このiOS5+プロジェクトはストーリーボードを使用しており、ARCがオンになっています。

内部に「円」を含むカスタムビューを作成しています(クリックを再表示します。これは背景画像になります)。内部に円セグメントを描画する必要があります(これは、drawRectですでに実行しています)。タイムスパン(コードでより明確になります)。

これで、3つのタイムスパンは、イベント配列から取得され、イベントアイテムを保持するイベントを表します(コードではより明確になります)

今、私が望んでいるのは、円セグメントの上にボタンを描画することです。これらのボタンは、特定のイベントにリンクする必要があります。(これは、IDに対応するボタンに識別子を追加し、クリックするとタイトルとボタンを示す注釈を開くのと同じくらい簡単です。したがって、基本的に、これらのボタンをマップキットのマップ注釈のように動作させて、ボタンをクリックして詳細ページ(既に作成し、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;
}

しかし、それは機能しません、それは表示されません

4

0 に答える 0