質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

2563閲覧

CALayerで描いた線の片端を固定させて回転させたいです

zmbdr

総合スコア10

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2015/08/26 09:19

CALayerで描いた線の片端(中心)を固定させて任意の角度まで回転させたら止める、
というプログラムを作りたいと思っています。

1回転させることはできたのですが、初めに縦に描いた白線の片端(中心の方)も動いてしまい、
回転させると中心に空円を描くような動きになってしまいます。
アナログ時計のように、片端を固定させたままもう片方の端の座標だけ動かしたいのですが、
どのように書けば良いでしょうか?

よろしくお願い致します。
線の描写はこちらです

- (void)drawInContext:(CGContextRef)ctx { CGMutablePathRef path = CGPathCreateMutable(); //配列で、描画する点を指定します。 指定した点同士をつなぐように直線を描きます。 CGPoint points[] = { CGPointMake(160, 220), CGPointMake(160, 120), }; //点の数を数えます。(配列の要素数をカウント) int numPoints = sizeof(points)/sizeof(points[0]); //点と点の数を指定して直線を描写します。 CGPathAddLines(path, NULL, points, numPoints); CGContextAddPath(ctx, path); CGPathRelease(path); //線の色を設定 UIColor *lineColor = [UIColor colorWithWhite:1.0 alpha:1.0]; CGContextSetStrokeColorWithColor(ctx, lineColor.CGColor); CGContextSetLineWidth(ctx, 5.0); CGContextDrawPath(ctx, kCGPathStroke); }

回転させるコードはこちらです。

//レイヤーを生成します LineLayer *linelayer = [LineLayer layer]; //サイズを指定します linelayer.frame = CGRectInset(self.view.bounds,0.0,0.0); linelayer.anchorPoint = CGPointMake(0.5, 0.5);//アニメーションの中心点の設定 [self.view.layer addSublayer:linelayer]; [linelayer setNeedsDisplay]; CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; animation.toValue = [NSNumber numberWithFloat:M_PI / 2.0]; animation.duration = 0.5; // 0.5秒で90度回転 animation.repeatCount = 1; // 1回くりかえす animation.cumulative = YES; // 効果を累積 [linelayer addAnimation:animation forKey:@"ImageViewRotation"];

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

anchorPointは回転の原点にも使用されます。
(0.5, 0.5)に設定しているのでレイヤーの中央を原点として回転することになります。
時計の針のように線の始点 or 終点を原点として回転させたい場合、その点の位置をanchorPointにするか、anchorPointの位置から線を描画するかのどちらかにすればいいです。

投稿2015/08/27 14:57

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問