1

私は次の設定をしています:

ここに画像の説明を入力してください

水色のビュー(これを呼びましょうparentView)には、と呼ばれる長方形のサブビュー(紫色のビュー)がありchildViewます。ユーザーは、パンタッチを使用して、赤い点が示すポイントに指を置き、それを押したり引いたりすることで、childViewを回転およびストレッチできます。

childViewユーザーがタッチを終えた後、赤い点で示されるポイントがの内側になるように、を十分に小さくスケーリングできる可能性がありparentViewます。

私の目標は、赤い点が中にあるparentViewかどうかを検出できるメソッドを作成することです。私は次のコードを書きました:

CGPoint childViewRedPoint = CGPointMake(self.bounds.size.width, self.bounds.size.height / 2);
CGPoint rotatedChildViewRedPoint = CGPointApplyAffineTransform(childViewRedPoint, CGAffineTransformMakeRotation(self.rotateAngle));
CGPoint convertedChildViewRedPoint = [self convertPoint:rotatedChildViewRedPoint toView:self.superview];

if (CGRectContainsPoint(self.superview.bounds, convertedChildViewRedPoint))
{
    return YES;
}
else
{
    return NO;
}

まず、内で定義されている赤い点を見つけchildView、次にビューが回転した量だけ回転し、次にそれをparentViews座標に変換します。

私が得ているポイントは意味をなさないようで、これは機能していません。私がここでどこが間違っているのか誰かが知っているかどうか疑問に思っていましたか?parentViewsスーパービューを考慮していませんか?

4

1 に答える 1

3

100%確信はありませんが、convertPoint:すでにローテーション(またはその他の変換)が考慮されていると思うので、必要なのは次のとおりです。

CGPoint childViewRedPoint = CGPointMake(self.bounds.size.width, self.bounds.size.height / 2);
CGPoint convertedChildViewRedPoint = [self convertPoint:childViewRedPoint toView:self.superview];

if (CGRectContainsPoint(self.superview.bounds, convertedChildViewRedPoint))
...
于 2013-03-27T04:01:31.817 に答える