1

こんにちは、ユーザーが画面をタップしたポイントにボタンを追加しようとしています。

これが私のUIViewファイルのコードです

- (void)drawRect:(CGRect)rect {
    // Drawing code
    NSLog(@"drawRect, %i, %i", firstTouch.x, firstTouch.y);
    [tagButton drawRect:CGRectMake(firstTouch.x, firstTouch.y, 100, 200)];
    [self addSubview:tagButton];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    firstTouch = [touch locationInView:self];

    [self setNeedsDisplay];
}

これはfirstTouchからのログです

2009-10-01 17:27:23.743 テキスト[2521:207] drawRect、0、1080311808

タッチの x、y ポイントを取得し、そのポイントに uibutton を作成するにはどうすればよいですか?

助けていただければ幸いです、ありがとう


これは私が思いついたもので、ビューにボタンを追加します。しかし、このビューをポップするとクラッシュします。問題が見つからないようです。誰が問題が何であるかを見ることができますか?

UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [newButton setFrame:CGRectMake(self.firstTouch.x, self.firstTouch.y, width, 17)];
        [newButton setTitle:[textField text] forState:UIControlStateNormal];
        [newButton setFont:[UIFont boldSystemFontOfSize:12]];
        [newButton setShowsTouchWhenHighlighted:YES];
        [newButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [newButton setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
        [newButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
        [newButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
        [newButton setBackgroundColor:[UIColor clearColor]];

        UIImage *bgImg = [[UIImage imageNamed:@"button_greyblue.png"] stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
        [newButton setBackgroundImage:bgImg forState:UIControlStateNormal];


        [self setTagButton:newButton];
        [self.view addSubview:tagButton];
        [newButton release];
4

2 に答える 2

0

%i を使用しているため、これらの値を取得できます。

firstTouch.x と .y の値は実際には float であるため、NSLog で %f を使用する必要があります。

ボタンを追加するには、毎回新しいボタンを割り当てる必要があります (専門家、間違っている場合は修正してください)。

それ以外は、コードの残りの部分は、タップされたポイントにボタンを追加するのに十分に見えます。

そうそう、touchBegan メソッド自体で firstTouch.x と firstTouch.y を取得して、そこにボタンを追加できます。

于 2009-10-01T07:47:15.983 に答える
0

drawRect を直接呼び出したくないと思います。touchesBegan で touchLocation をキャプチャしてから、touchesBegan で tagButton のフレームを更新します。Apple が提供する MoveMeというサンプル アプリがあります。これは非常にシンプルで、これを説明するのに役立ちます。

また、これらのポイントは int ではなく float として表現されるため、%i の代わりに %f を使用します。


新しい「問題」に対応するには: newButton を過剰にリリースしているようです。ルールを覚えておいてください... alloc、new、または copy によってオブジェクトを取得した場合は、それを解放する必要があります。そうでない場合は、そうではありません。そのボタンを離しすぎているため、アプリがクラッシュしています。[newButton release]を削除すれば問題ないはずです...

于 2009-10-01T07:54:39.417 に答える