1

整数に 1 を足したくないとしましょう。これは、 a を押し下げてから、UIButton別の で指を離したときにのみ実行されUIButtonます。ドラッグコンボ。IBActionコンボを発生させる最も簡単な方法は何ですか? これは、タッチ座標で行うことも、単にUIButtonsandで行うこともできますIBActions

で2ボタンコンボを作成するにはどうすればよいですかIBActions

4

5 に答える 5

5

タッチダウンしたいボタンを「タッチダウン」「タッチアップインサイド」「タッチアップアウトサイド」ボタンとして実装してみてください。

UIButtons は多くの異なるタイプのイベントに応答できます Touch Cancel Touch Down Touch Down Repeat Touch Drag Enter Touch Drag Exit Touch Drag Inside Touch Drag Outside Touch Up Inside Touch Up Outside

これらのボタンごとに異なるアクション コードを実装して、必要なものを最適に制御できます。単純なケースでは、上記の 2 つだけを使用します。

このコードはテスト済みであり、機能します

ViewController ヘッダー ファイル (ここに私のもの) で:

@interface ViewController : UIViewController{
    IBOutlet UIButton * upButton;    // count up when finger released button
    IBOutlet UIButton * downButton;
    IBOutlet UILable * score;
    BOOL isButtonDown;
    unsigned int youCounter;
}

-(IBAction)downButtonDown:(id)sender;
-(IBAction)downButtonUpInside:(id)sender;
-(IBAction)downButtonDragOutside:(id)sender event:(UIEvent *)event;
-(IBAction)downButtonUpOutside:(id)sender event:(UIEvent *)event;

@end

.xib で、下ボタン (元の指で押したボタンにしたいボタン) を上記の適切なアクションに接続します。

ViewController.m ファイルで

-(void)viewDidLoad{
    [super viewDidLoad];

    isButtonDown = NO;
    youCounter   = 0;
}

-(IBAction)downButtonDown:(id)sender{
    isButtonDown = YES;
}

-(IBAction)downButtonUpInside:(id)sender{
    isButtonDown = NO;
}

-(IBAction)downButtonDragOutside:(id)sender event:(UIEvent *)event{
    NSArray theTouches = [[event allTouches] allObjects];

    [downButton setHighlighted:YES];

    if(YES == [upButton pointInside:[[theTouches objectAtIndex:0] locationInView:upButton] withEvent:event]){
        [upButton setHighlighted:YES];
    }else{
        [upButton setHighlighted:NO];
    }
}

-(IBAction)downButtonUpOutside:(id)sender event:(UIEvent *)event{
    if(YES == [upButton pointInside:[[theTouches objectAtIndex:0] locationInView:upButton] withEvent:event]){
        youCounter++;
        score.text = [NSString stringWithFormat:@"Score = %d", youCounter];
    }

    [downButton setHighlighted:NO];
    [upButton setHighlighted:NO];
}
于 2012-06-20T14:37:11.653 に答える
3
 //Initalize a BOOL variable to know if you started the touch in the right place.
 BOOL correctStart = NO;

 //Get the location of the first touch, if its in the first button make correctStart = YES.
 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
      NSSet *allTouches = [event allTouches];
           for (UITouch *touch in allTouches) {
                if ([touch locationInView:button1.view]) {
                     correctStart = YES;
                }
           }
 }

 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
      NSSet *allTouches = [event allTouches];
           for (UITouch *touch in allTouches) {
                if (([touch locationInView:button2.view]) && (correctStart == YES)) {
                     anInteger++;
                }
           }
      correctStart = NO;
 }

私は自分の Mac を使用していないため、このコードを試していないため、結果は異なる場合がありますが、これで正しい方向に進むはずです。

于 2012-06-20T14:38:57.707 に答える
1

// ボタンを作成し、ターゲットを追加します

UIButton *cloudButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [cloudButton setImage:[UIImage imageNamed:@"notification_add.png"] forState:UIControlStateNormal];
        [cloudButton setFrame:CGRectMake(0, 0, 30, 30)];
        [cloudButton addTarget:self action:@selector(dragBegan:withEvent: )
           forControlEvents: UIControlEventTouchDown];
        [cloudButton addTarget:self action:@selector(dragMoving:withEvent: )
           forControlEvents: UIControlEventTouchDragInside | UIControlEventTouchDragOutside];
        [cloudButton addTarget:self action:@selector(dragEnded:withEvent: )
           forControlEvents: UIControlEventTouchUpInside |
         UIControlEventTouchUpOutside];

        [self.view addSubview:cloudButton];

//イベントメソッド

- (void) dragBegan: (UIControl *) c withEvent:ev
{
    NSLog(@"dragBegan......");
}

- (void) dragMoving: (UIControl *) c withEvent:ev
{
    NSLog(@"dragMoving..............");
}
- (void) dragEnded: (UIControl *) c withEvent:ev
{
    NSLog(@"dragEnded..............");
}
于 2014-08-08T07:36:11.037 に答える
1

もう 1 つの方法は、UITapGestureRecognizerandを使用UIPanGestureRecognizerしてボタンの位置を追跡することです。こちらの方が読みやすいと思いました。(これ以上の動作は必要なかったので、実際には UILabels を使用することになりましたUIButton。)

于 2013-03-04T20:31:30.200 に答える