Как применить 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;
метод в классе вашей фигуры.