Как применить UILongPressGestureRecognizer к фигуре в C4?

Я работаю в C4 и хочу иметь возможность нажимать на фигуру и медленно тащить ее вверх. Я работал с учебным пособием "Получение объектов UITouch для UIGestureRecognizer" и другими учебными пособиями по TouchesMoved и TouchesBegan Objective-C, но этот жест не применяется к фигуре. Проект строится, но форма все еще не перемещается при нажатии и перетаскивании. Есть ли особый способ, которым C4 применяет жесты к фигурам?

Это мой код:

DragGestureRecognizer.h

#import <UIKit/UIKit.h>


@interface DragGestureRecognizer : UILongPressGestureRecognizer {

 }

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

@end

@protocol DragGestureRecognizerDelegate <UIGestureRecognizerDelegate>
- (void) gestureRecognizer:(UIGestureRecognizer *)gr movedWithTouches:(NSSet*)touches     andEvent:(UIEvent *)event;
@end

C4WorkSpace.m:

#import "C4WorkSpace.h"
#import "DragGestureRecognizer.h"


@implementation DragGestureRecognizer

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    [super touchesMoved:touches withEvent:event];

    if ([self.delegate respondsToSelector:@selector(gestureRecognizer:movedWithTouches:andEvent:)]) {
    [(id)self.delegate gestureRecognizer:self movedWithTouches:touches andEvent:event];

    }
}

@end 

@implementation C4WorkSpace {
    C4Shape *circle;
}

- (void)longPress:(UILongPressGestureRecognizer*)gesture {
    if ( gesture.state == UIGestureRecognizerStateEnded ) {
        NSLog(@"Long Press");
    }
}

-(void)setup {

    circle = [C4Shape ellipse:CGRectMake(5,412,75,75)];
    [self.canvas addShape:circle];
}


 @end

1 ответ

Решение

C4 имеет метод, который упрощает процесс добавления жестов к любому видимому объекту (например, C4Shape, C4Movie, C4Label...).

ПРИМЕЧАНИЕ: вам нужно будет создать подкласс C4Shape, в котором вы можете создать несколько пользовательских методов.

Например, следующее добавит жест касания к C4Shape:

C4Shape *s = [C4Shape rect:CGRectMake(..)];
[s addGesture:TAP name:@"singleTapGesture" action:@"tap"];

addGesture:name:action: Метод указан в документации C4Control и определяется следующим образом:

Добавляет жест к объекту.

- (void)addGesture:(C4GestureType)type name:(NSString *)gestureName action:(NSString *)methodName

(C4GestureType)type может быть любым из:

  • НАЖМИТЕ
  • SWIPERIGHT
  • ПРОВЕДИТЕ ПАЛЬЦЕМ ВЛЕВО
  • SWIPEUP
  • ПРОВЕДИТЕ ВНИЗ
  • КАСТРЮЛЯ
  • LONGPRESS

Следующие жесты доступны, но еще не были протестированы:

  • PINCH
  • ПОВОРОТ

(NSString *)gestureName позволяет указать уникальное имя для жеста.

(NSString *)methodName позволяет указать метод, который будет запускать жест.

Итак... возвращаясь к примеру выше:

[s addGesture:TAP name:@"singleTapGesture" action:@"tap"];

... добавлю к s возражать TAP жест называется singleTapGesture который, при запуске, будет запускать -(void)tap; метод (который должен быть уже определен в вашем классе).


Вы можете применить технику, которую я описал выше, но вместо этого использовать:

[s addGesture:PAN name:@"panGesture" action:@"move:];

вам также придется определить

-(void)move:(id)sender;

метод в классе вашей фигуры.

Другие вопросы по тегам