iphoneobjective-ccocoa-touchtouchespiano

Semi-piano app touch troubles with UIButtons


I am working on a semi-piano app with a diffrent keyboard-layout then a usual one.

I created the view manually with UIButtons, My problem was I that I didn't know how to slide from a UIButton to another, I figured that out with addTarget with the option of withEvent, which gave me the access to the touches.

Now, after I added the target like this:

[C addTarget:self action:@selector(outsideOfKey: forEvent:) forControlEvents:UIControlEventTouchDragOutside|UIControlEventTouchDragInside];
[C addTarget:self action:@selector(keyGetsLeft: forEvent:) forControlEvents:UIControlEventTouchUpOutside | UIControlEventTouchUpInside];

(also for all of the other keys),

I maneged to make them slideable,

outsideOfKey:forEvent: is as follows:

-(void) outsideOfKey:(id)sender forEvent:(UIEvent *)event
{    
    for(UITouch *t in [event allTouches])
    {

            CGPoint touchPoint = [t locationInView:window];
            if(CGRectContainsPoint(C.frame, touchPoint))
             {
                 C.highlighted = YES;
             }
            else{
                C.highlighted = NO;
            }

(Done for all the other keys as well) I can slide from and into other keys, and when I leave them in keyGetsLeft:forEvent: I have just used the same syntx without the else, and the highlighted became NO.

Up to here it's easy, But then when I try to do multi-touch, I can slide only one of the touches all around and the others must stay in the same position.

And even more, If I take one of the fingers away all of them are becoming non-highlighted, I know the reasons to all of that, but I don't know how to fix it and make it to work.


Solution

  • I am afraid, bensnider is right. But I'd implement it via GestureRecognizer:

    Each key has one TapRecognizer, while a parent view has a SwipeRecognizer to detect slides form one key to another.

    Very useful, on Apple Developer Video Archivelogin with development account required: