4

私はC4で作業していて、図形を押し下げて低速で上にドラッグできるようにしたいと考えています。「UIGestureRecognizer用のUITouchオブジェクトの取得」チュートリアルおよびその他のTouchesMovedおよびTouchesBeganObjective-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いずれかになります。

  • TAP
  • SWIPERIGHT
  • 左スワイプ
  • 上にスワイプする
  • スワイプダウン
  • PAN
  • 長押し

次のジェスチャが使用可能ですが、まだテストされていません。

  • ピンチ
  • 回転

(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 に答える