2009-08-18 14 views
0

スピードメーターについて考えると、周りに10mph、20mph、30mphなどのような小さなストロークを想像してみてください。私は同様のものを描こうとします。このビューを別のビューに配置するにはどうすればよいですか?

はこれを想像:3つのビューがあります。A、B、Cの

Aは、BはCのCは、そのスピードメーター上のストロークで所有している所有しています。したがって、簡単に作成するには、Aのサイズとまったく同じBのビューがあります。まず、Cはy = 0の上に中央に配置されます。それは簡単です。そして、Bを10度回転させます。シンプルな私はそのスピードメーターにすべてのストロークが来るまで、Aの上にB + Cの "コピー"を追加し続けます。

今のところ、Bはちょうどゴミだけなので、それはすべて大きなメモリの無駄です。これはCのみを含み、Cを簡単に目的の位置に移動させるために一度だけ使用されます。私はBを取り除き、代わりにCを直接Aの上に置きます。

どうすればいいですか?私はCの座標をAの座標に変換してから、Bを取り除いてAの上にCの位置を直接つけることができますか? Bは回転してAと同じくらい大きいことに注意してください。説明するのは難しいです。あなたがそれ以上の説明が必要なのかどうか教えてください。

+0

View Aの座標がわかっている場合は、それを使用できませんか?私はあなたが何を求めているのか本当に理解していません。 – mk12

+0

私はそれをより詳細に更新しました。その問題を見るのに役立つことを願っています。 –

答えて

0

私はCを追加してCのアンカーポイントを円の中心に設定することで、かなり簡単にBを取り除くことができると思います(私はy = A.frame.size.heightと仮定します、xは中心です)。回転をCに適用すると、そのアンカーの周りを回転して目的の効果を得る必要があります。

C.layer.anchorPoint = CGPointMake(A.frame.size.height, A.center.x); 
C.transform = CGAffineTransformMakeRotation(angle); 

それとも、また、その後の翻訳アップと回転の変換を連結したものを作成し、Aの中心にCを追加することができますよう

何か。

すなわち

CGAffineTransform trans1 = CGAffineTransformMakeRotation(angle); 
CGAffineTransform trans2 = CGAffineTransformMakeTranslation(0, A.frame.size.height); 
C.transform = CGAffineTransformConcat(trans1, trans2); 

あなたが本当にこれらすべての目盛りを描画しようとしている場合は、タイラーの描画ソリューションは、おそらくより良いですが。

+0

どちらも素晴らしいですが、私の場合はあなたの方が簡単に申し込むことができました。きよしとタイラーの両方に感謝します。両方に投票した。 –

+0

このコードはかなりシンプルです。 – Tyler

1

この質問はあいまいですが、ここで少しを助けるかもしれない3つのアイデアです:

(1)の代わりにBを取り払うの、あなただけのAを取り除くことができますか?

(2)UIView方法convertPoint:toView: - あなたはAの面でCの座標を見つけるために、Bでこれを呼び出して、ABのサブビューを移動するためにそれを使用することができるかもしれません。

(3)ビューを回転する代わりに、小さなサブビューを追加したり、必要な場所に直接描画したりすることもできます。

例えば、ここではスピードメーター周りの目盛りの描画に役立つかもしれない何か:有用であるために

CGPoint from, to; 
CGFloat innerRadius = 50.0; 
CGFloat outerRadius = 60.0; 
for (float angle = 0; angle < M_PI*2; angle += M_PI/100) { 
    from.x = innerRadius * cos(angle); 
    from.y = innerRadius * sin(angle); 
    to.x = outerRadius * cos(angle); 
    to.y = outerRadius * sin(angle); 
    [self drawLineFrom:from to:to]; 
} 

を、あなたはおそらく(回転中心(0,0)を持っている)これらの点を翻訳したいと思いますあなたの視点の一点を中心にして配置されます。

+0

(1)残念ながら、私はアプリ内のほとんどすべてを変更する必要があります。 (2 + 3)が良いと思う! –

関連する問題