Вопрос по ios, touch, drag, ipad, uibutton – Xcode iOS нажмите кнопку вниз и перетащите вверх на вторую кнопку

1

Допустим, я хочу добавить 1 к целому числу. Это будет сделано только тогда, когда я нажму наUIButton а затем отпустите мой палец на другойUIButton. A drag combo. Какой самый простой способ я могу сделатьIBAction происходят из комбо? Это можно сделать с помощью сенсорных координат или, может быть, простоUIButtons а такжеIBActions.

How do I create a 2-button combo with IBActions

Error: User Rate Limit Exceeded trumpetlicks

Ваш Ответ

5   ответов
1

Error: User Rate Limit ExceededViewDidLoadError: User Rate Limit Exceeded

    [button1 addTarget:self action:@selector(dragMoving:withEvent: )
              forControlEvents: UIControlEventTouchDragInside | UIControlEventTouchDragOutside];

    [button1 addTarget:self action:@selector(dragEnded:withEvent: )
              forControlEvents: UIControlEventTouchUpInside |
     UIControlEventTouchUpOutside];

Error: User Rate Limit ExceededdragMovingError: User Rate Limit Exceeded

- (void)dragMoving:(UIControl *)c withEvent:event{

    NSSet* touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:[button2 superview]];


        if ( CGRectContainsPoint(button2.frame, currentPoint) ) {
            NSLog(@"over second button); 
        } 
    }

Error: User Rate Limit ExceededdragEndedError: User Rate Limit Exceeded

- (void) dragEnded:(UIControl *)c withEvent:event{

    NSSet* touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentPoint = [touch locationInView:[self.button1 superview]];
        if ( CGRectContainsPoint(button2.frame, currentPoint) ) {
            NSLog(@"ended on button 2");
            //add 1 to the integer


        }
    else {
        NSLog(@"not on button 2");
    }
}
1

Error: User Rate Limit ExceededUITapGestureRecognizerError: User Rate Limit ExceededUIPanGestureRecognizerError: User Rate Limit ExceededUIButtonError: User Rate Limit Exceeded

1

Error: User Rate Limit Exceeded

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: )
           forContr,olEvents: UIControlEventTouchUpInside |
         UIControlEventTouchUpOutside];

        [self.view addSubview:cloudButton];

Error: User Rate Limit Exceeded

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

- (void) dragMoving: (UIControl *) c withEvent:ev
{
    NSLog(@"dragMoving..............");
}
- (void) dragEnded: (UIControl *) c withEvent:ev
{
    NSLog(@"dragEnded..............");
}
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;
 }

Error: User Rate Limit Exceeded

правильные блики, хорошая работа Comradsky
спасибо большое, хорошая работа Comradsky
@comradsky Как я уже сказал, я сейчас не на своем Mac. Когда я вернусь домой после работы, если у вас все еще будут проблемы, я устраню неполадки в моем коде для вас.
Большое спасибо, Джереми. Чтобы было ясно, что я установил свои кнопки как ibactions в .h, и ваш код, конечно, принадлежит .m. Поэтому я постараюсь, но мне, вероятно, понадобится ваша помощь. Но я многому научился. еще раз спасибо Comradsky
Этот код тоже не работает, locationInView возвращает CGPoint, а не логическое значение!
5

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

@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

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

-(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];
}
Да, я пытаюсь обдумать этот вопрос, поскольку должен быть более простой способ, чем тот ответ, который дал Джереми, я начал думать таким образом, а затем пытался думать в рамках API Apple Button !!! +1 к Джереми
@comradsky - Должен быть в пути (или там: -) !!! Посмотрите также на вывод консоли, чтобы лучше понять происходящее !!!
это не работает. Comradsky
Touch Up Inside отправляется только тогда, когда касание началось внутри кнопки. Если вы перетащите из-за пределов кнопки, а затем отпустите внутри кнопки, это не вызываетTouch Up Inside на этом контроле.
@comradsky - АБСОЛЮТНО ДЕЛАЕТ, я только что проверил это !!!

Похожие вопросы