4

我在 C4 中工作,希望能够按下一个形状并以慢速向上拖动它。我一直在使用“为 UIGestureRecognizer 获取 UITouch 对象”教程和其他 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
4

1 回答 1

2

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可以是以下任何一项:

  • 轻敲
  • 刷卡
  • 向左滑动
  • 向上滑动
  • 刷下
  • 平底锅
  • 长按

以下手势可用,但尚未经过测试:

  • 回转

(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;

形状类中的方法。

于 2012-05-09T21:08:44.597 回答