5

右下隅のボタンをドラッグしてイメージビューのサイズを変更および回転する機能を持つアプリを開発しています。

右下隅のボタンを斜めにドラッグするとイメージビューのサイズが変更された、またはボタンを左右にドラッグするとイメージビューが方向に従って回転したという機能を持つアプリを見ました。アプリにこの機能を実装したい

イメージビューのサイズ変更だけでなく、1 本の指の回転の実装にも苦労しています。

右下隅のボタンをドラッグすることで、イメージビューのサイズ変更を正常に実装できました。しかし、画像ビューに回転を追加するのに十分な知識がありません

正しい方法で私を導いてください。

右隅をドラッグして画像ビューのサイズを変更するための以下のコードを追加しました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];

    touchStart = [[touches anyObject] locationInView:imageView];
    isResizingLR = (containerVw.bounds.size.width - touchStart.x < kResizeThumbSize && containerVw.bounds.size.height - touchStart.y < kResizeThumbSize);

}



- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint touchPoint = [[touches anyObject] locationInView:imageView];
CGPoint previous=[[touches anyObject]previousLocationInView:imageView];

UITouch *touch = [[event allTouches] anyObject];


float  deltaWidth = touchPoint.x-previous.x;
float  deltaHeight = touchPoint.y-previous.y;


    if (isResizingLR) {
        containerVw.frame = CGRectMake(containerVw.frame.origin.x, containerVw.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); 
        imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth);                      
        dragIm.frame = CGRectMake(containerVw.frame.size.width-10, containerVw.frame.size.height-10,20,20);


    if (!isResizingLR) {
        containerVw.center = CGPointMake(containerVw.center.x + touchPoint.x touchStart.x,containerVw.center.y + touchPoint.y - touchStart.y);
    }
}

ここに画像の説明を入力

4

3 に答える 3

10

私はあなたと同じ障害にぶつかったので、独自のモジュールZDStickerViewを開発しました。いい参考になります。

まず、ビューの autoresizingMask が柔軟であることを確認してください。

    autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

そうしないと、サイズ変更が正しく機能しません。

次に、「CGAffineTransformMakeRotation」と「atan2」関数を使用して、次のように回転の問題を解決することをお勧めします。

    float ang = atan2([recognizer locationInView:self.superview].y - self.center.y,
                      [recognizer locationInView:self.superview].x - self.center.x);
    float angleDiff = deltaAngle - ang;
    self.transform = CGAffineTransformMakeRotation(-angleDiff);

第三に、次のように相対座標を使用してください。

    self.transform = CGAffineTransformMakeRotation(-angleDiff);
于 2013-06-18T10:47:06.923 に答える
5

この問題を修正し、このコントロールを cocoacontrols にアップロードしました

http://www.cocoacontrols.com/controls/tdresizerview

そしてサンプルコード

https://www.dropbox.com/s/yb0vzy0wao52bgt/SampeResizeView.zip

更新された回答

https://www.cocoacontrols.com/controls/zdstickerview

于 2013-03-28T12:28:37.373 に答える