1

ユーザーが時計の針を回転できるようにするアプリケーションを開発しています。そのために、針の imageview の transform プロパティを使用しています:

CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); minutesNeedle.transform = newTrans;

ユーザーのタッチを検出するために、針のスペース (分または時間のフレーム) を検出する必要があります。そして、ここで私の問題が明らかになりました。画像を回転させた後、画像が引き伸ばされて他の画像と干渉しているように見えます。UIView クラスのドキュメントには、変換後にビューのフレームが変更され、center プロパティと bounds プロパティを使用する必要があることが記載されています。ただし、境界プロパティを使用して、スーパービューにあるタッチ ユーザーを検出することはできません。

フレームサイズを変更せずにこのアニメーションを行う他の方法はありますか (私は疑問です)。または、touchesEnded メソッドでフレームのサイズを変更できますか (試してみましたが無駄でした)。私がそこで1週間ブロックするのを助けてください!! ありがとう

4

2 に答える 2

1

何かが足りないのかもしれませんが、この競合を完全に回避できるようです。針のビューとは別に、タッチを処理するための別のビューを作成します。タッチ イベントで、針ビューを適切に移動します。この個別のビューは、本質的に時計のサイズであり、他のビューにオーバーレイされ、背景が明確になります。ビューコントローラー(または針を所有するもの)がそれを調整できるように、適切なコールバックを持つデリゲートがあります。

コールバックに関する限り、次のようなタッチ イベントを転送します。

    - (void)touchReceiverView:(TouchReceiverView *)view didReceiveTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
于 2012-10-05T23:15:01.310 に答える
0

CALayers を使用すると、はるかに簡単になり、パフォーマンスが向上します。

CALayer *handLayer = [CALayer layer];
handLayer.contents = (id)[UIImage imageNamed:@"hand.png"].CGImage;
handLayer.anchorPoint = CGPointMake(0.5,0.0)];
[myview.layer addSublayer:handLayer];

//i.e.: if handLayer represents the seconds hand then repeat this every second ;)
handLayer.transform = CGAffineTransformMakeRotation (angle); //set the angle here


誰かがCALayers を使用して ClockView サンプルを作成しました。

于 2012-10-08T11:03:25.500 に答える