4

そのため、IOS用のC4コーディングフレームワークを使用していますが、よくわからないことがあります。

C4 githubアカウントの2つの例(testScrollViewとWalkCycleの例)を一緒に使用しています。

WalkCycleの例を小さなアニメーションキャラクターのテンプレートとして使用するWalkerというC4Viewサブクラスがあります。この文字は、testScrollViewの例から作成されたスクロール可能なビューに配置されます。彼にはパンジェスチャが追加されているため、ユーザーは彼を画面の上部にドラッグして、落下して下部に飛び散るのを見ることができます。

唯一の問題は、パンジェスチャが終了したときに呼び出されるメソッドを取得できないことです。-(void)touchesEndedコマンドからではなく、試した他のコマンドからも取得できません。

私には役立たなかったが、他の誰かがこれを解決するのに役立つかもしれない同様の問題へのいくつかのリンク:

私の完全に無学で根拠のない予感は、c4shapesとimagesで終わるtouchsEndedの認識にこの問題がなかったので、歩行者がC4Viewの子であることに関係しているということです。

コードに何を投稿すればよいかわかりませんが、Walker.mの関連情報を以下に示します。

-(void)setup {
walkA = [C4Image animatedImageWithNames:@[@"beaviswalk1.tiff",
         @"beaviswalk2.tiff",
         @"beaviswalk3.tiff",
         @"beaviswalk4.tiff",
         @"beaviswalk5.tiff",
         @"beaviswalk6.tiff",
         @"beaviswalk7.tiff",
         @"beaviswalk8.tiff",
         @"beaviswalk9.tiff",
         ]];
[self addImage:walkA];
currentImage = walkA;
[walkA play];

mover = [C4Timer automaticTimerWithInterval:0.05f target:self method:@"walking" repeats:YES];


[self addGesture:TAP name:@"tapGesture" action:@"trip"];
[self addGesture:PAN name:@"panGesture" action:@"move:"];}

およびtouchesEnded:

-(void)touchesEnded {
C4Log(@"touches Ended");
}

Walker.hを見ると、何か奇妙なことに気づきました。

#import "C4View.h"

@interface Walker : C4Image
-(id)initWithFrame:(CGRect)frame;
-(void)play;
-(void)switchWalkCycle;
-(void)trip;
-(void)bleed;
-(void)walking;
-(void)touchesEnded;
-(void)noTouching;
@end

ある時点で@interfaceをC4Imageに変更しましたが、その時点では何の効果もなかったようで、TAPおよびPANジェスチャが機能するようになりました。これまで....C4Viewに戻すと、すべてのジェスチャがサポートされなくなります。問題があると思いますか?

簡単な解決策がある場合はお詫びしますが、これを修正しようとするとかなり迷ってしまいます。

4

1 に答える 1

4

Walkerのmove:PANジェスチャに追加するメソッドは、実際にはクラスに組み込まれているメソッドC4Control(つまり、すべてのビジュアルオブジェクト)を参照しています。

ジェスチャがいつリリースされたかを把握するために、メソッドをオーバーライドして、ジェスチャの状態がいつ終了したかをチェックする条件を追加できます。

これを行うには、最初にC4オブジェクトをサブクラス化します(ここではC4Shapeを使用していますが、C4Imageを使用できます)。

ヘッダーは次のようになります。

#import "C4Shape.h"
@interface MyShape : C4Shape
@end

実装には、次のようなオーバーライドされたmove:メソッドがあります。

#import "MyShape.h"
@implementation MyShape

-(void)move:(id)sender {
    [super move:sender];
    UIPanGestureRecognizer *panGesture = (UIPanGestureRecognizer *)sender;
    if(panGesture.state == UIGestureRecognizerStateEnded) {
        [self methodToRunWhenPanGestureEnds];
    }
}

-(void)methodToRunWhenPanGestureEnds {
    C4Log(@"the pan gesture ended");
}

@end

...最後に、ワークスペースで、通常どおりにオブジェクトを作成してジェスチャーを追加できます。

#import "C4WorkSpace.h"
#import "MyShape.h"
@implementation C4WorkSpace
-(void)setup {
    MyShape *s = [[MyShape alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    [s rect:s.frame];
    [s addGesture:PAN name:@"pan" action:@"move:"];
    [self.canvas addShape:s];
}
@end

これを行う方法を示すC4プロジェクトのコピーをここから入手できます:https ://github.com/C4Code/PanGestureEnded


あなたが抱えていたC4Viewの問題に関しては、あなたは正しいです...あなたは今のところC4Viewsでジェスチャーが機能することはありません。通常のUIGestureRecognizersをC4Viewsに追加できますが[object addGesture:name:action:]、C4Viewクラスにこれをまだ実装していないため、メソッドは機能しません(ただし、これはすでにToDoリストにあります)。

于 2012-12-14T08:26:20.537 に答える