0

私はまず、objectiveC はまったく初めてであり、インターフェイス ビルダーも初めて使用することを言います。パンジェスチャを機能させたいだけです(本当にやりたいことにもズームジェスチャが必要ですが、簡単なパンから始めると思いました)。いくつかのチュートリアルに従いましたが、iPhone 5 でもシミュレーターでもまだ機能しません。ページベースのアプリケーションに基づいて始めました。次に、新しいビューとそのビュー コントローラーを作成しました。次に、Pan Gesture を Interface Builder からビューにドラッグ アンド ドロップしました。ビューでのユーザー インタラクションが有効になっています。

これが私のコードです:

uACropViewController.h

 #import <UIKit/UIKit.h>

@interface uACropViewController : UIViewController
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer;
@property (weak, nonatomic) IBOutlet UIImageView *CropImage;
@property (strong, nonatomic) IBOutlet UIPanGestureRecognizer *onGestureAction;

@end

uACropViewController.m

#import "uACropViewController.h"

@interface uACropViewController ()

@end

@implementation uACropViewController
@synthesize CropImage;
static CGPoint originalPoint;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //for resetting the center of the image, when the pan gesture is ended.
    originalPoint=CropImage.center;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(IBAction)onGestureAction:(id)sender{
    if ([sender isKindOfClass:[UIPanGestureRecognizer class]]) {
        //is a pan gesture
        UIPanGestureRecognizer *recognizer=(UIPanGestureRecognizer *)sender;

        if (recognizer.state==UIGestureRecognizerStateBegan||recognizer.state==UIGestureRecognizerStateChanged) {
            CGPoint nextPoint= [recognizer translationInView:self.view];
            CGPoint currentPoint=CropImage.center;
            currentPoint.x +=nextPoint.x;
            currentPoint.y +=nextPoint.y;

            CropImage.center=currentPoint;
            [recognizer setTranslation:CGPointZero inView:self.view];

        }
        if (recognizer.state==UIGestureRecognizerStateEnded) {
            CropImage.center=originalPoint;
            [recognizer setTranslation:CGPointZero inView:self.view];
        }

        return;
    }

}

@end

正直なところ、ここで何が問題になっているのかわかりません。ヘルプやポインタをいただければ幸いです。ありがとう、スセ

4

1 に答える 1

0

IBOutlet はビュー内のそのオブジェクトへの参照であり、IBAction はその変数でイベントがトリガーされたときに呼び出されるアクションです。

たとえば、UIButton IBOutlet を使用して UIButton のプロパティ (サイズなど) を変更したり、UIButton IBAction を使用してボタンが押されたことを認識したりできます。

あなたの場合、 onGestureAction はそのジェスチャ認識エンジンを指す変数であり、 hanldePan: はアクション レスポンダーです。

ここにメソッドを追加してみてください:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer
{
            if (recognizer.state==UIGestureRecognizerStateBegan||recognizer.state==UIGestureRecognizerStateChanged) {
                CGPoint nextPoint= [recognizer translationInView:self.view];
                CGPoint currentPoint=CropImage.center;
                currentPoint.x +=nextPoint.x;
                currentPoint.y +=nextPoint.y;

                CropImage.center=currentPoint;
                [recognizer setTranslation:CGPointZero inView:self.view];

            }
            if (recognizer.state==UIGestureRecognizerStateEnded) {
                CropImage.center=originalPoint;
                [recognizer setTranslation:CGPointZero inView:self.view];
            }

            return;
        }
于 2013-10-14T12:51:12.730 に答える