0

実際、私はUIViewのサブクラスであるMyViewに三角形、長方形、五角形のような図を描きます。MyViewの任意のポイント(図の内側にあるかどうかに関係なく)に触れると、MyViewが移動します。ダイアグラムの内側のポイントに触れたいので、移動する必要があります。MyViewでパンジェスチャレコグナイザーを使用しています。提案してください。

私のコードは次のとおりです。

ViewController.m

- (void)viewDidLoad
{
    MyView *myView = [[MyView  alloc] initWithFrame:CGRectMake(0, 100, 200, 100)];
    [self.view addSubview:myView];
    [super viewDidLoad];
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scalePiece:)];
    [pinchGesture setDelegate:self];
    [myView addGestureRecognizer:pinchGesture];
    [pinchGesture release];
}

- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
{

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
        [gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
        [gestureRecognizer setScale:1];
    }
}

MyView.m

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    context =UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
    // And draw with a blue fill color
    CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1.0);
    // Draw them with a 2.0 stroke width so they are a bit more visible.
    CGContextSetLineWidth(context, 2.0);

    CGContextMoveToPoint(context, 50.0, 10.0);  
    CGContextAddLineToPoint(context, 5.0, 70.0);  
    CGContextAddLineToPoint(context, 150.0, 55.0); 
    CGContextDrawPath(context, kCGPathFillStroke);
    CGContextClosePath(context);
    CGContextStrokePath(context);

}
4

1 に答える 1

0

それで、ピンチジェスチャを実行するコードがここにあり、さらにパンジェスチャを実行したいですか?その場合は、viewDidLoadでパンジェスチャを作成することをお勧めします。

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(movePiece:)];
[myView addGestureRecognizer:panGesture];
[panGesture release];

次に、MyViewクラスにivarを追加します。

CGPoint _originalCenter;

そして最後に、ビューを移動する方法があります。

- (void)movePiece:(UIPanGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan)
    {
        _originalCenter = [gestureRecognizer view].center;
    }
    else if ([gestureRecognizer state] == UIGestureRecognizerStateChanged) 
    {
        CGPoint translation = [gestureRecognizer translationInView:self.view];

        [gestureRecognizer view].center = CGPointMake(_originalCenter.x + translation.x, _originalCenter.y + translation.y);
    }
}

余談ですが、コードに関するいくつかの所見:

  1. ピンチジェスチャのデリゲートを設定していますが、それは必須ではありません。それは方法によって達成されinitWithTargetます。

  2. あなたのメソッドでは、呼び出す前にdrawRect呼び出したいと思います。CGContextClosePathCGContextDrawPath

とにかく、パンジェスチャを使用してサブビューを移動する方法の例を示して、質問に答えたことを願っています。(「パンジェスチャを使用しています...」とおっしゃっていましたが、「パンジェスチャを使用したい...」という意味だと思います。)質問を誤解した場合は、質問を明確にして言い換えてください。それに答えるのにひびが入る。

于 2012-06-19T14:17:36.503 に答える