1つの解決策:図のような背景ビュー(青いボックス)があります。このビューが不透明であることを確認してください。新しいUIViewサブクラスを定義し、それを私がバックグラウンドビューと呼んでいるものの上に配置します(このビューは不透明ではありません)。これをマーカービューと呼びましょう。
マーカービューは、線を描画するためのxオフセットをいつでも知ることができます。これは、rectパラメーターをクリアカラー(alpha = 0)に設定するdrawRectメソッドを提供します。次に、Quartz呼び出しを使用して単一の垂直線を描画します(ブール値がそれを行うように指示した場合)。
コントローラが起動すると、このビューに線を引かないように指示します。起動時に、ブール値をYESに変更し、x座標を指定してから、ビューsetNeedsDisplayInRect:CGRectMake(theXoffset、0、1、heightOfView)];を指定します。
多少の遅延がある場合でも、ビューが最終的に描画するときは、「リアルタイム」で更新しているため、x値は最新である必要があります。
編集:
マーカーとは、垂直線を意味します-それは場所を「マーク」しませんか?
alpha 0は、(この場合)オーバーレイビューの大部分である「マーカー」ビューがクリアカラーになることを意味します。つまり、各ピクセルがクリア(alpha = 0)になり、その下のビューがブロックされないようになります。このビューによって描画される唯一のピクセルは垂直線です。
BOOL、"x"など-ビューの領域プロパティ。もう少し必要かもしれませんが、多くは必要ありません。これらのプロパティは、「drawRect:」が呼び出されたときに何をすべきかをビューに指示します。
Quartz(Appleが実際に描画するために使用するテクノロジー)について少し学ぶ必要があります。drawRectでは、現在のCGContextRefを取得し、それを事実上すべての呼び出しで使用して、描画する線の幅を設定し(デフォルトは1)、線の色を設定し、あるポイントに移動し、他のポイントに線を描画しますポイント(これは「パス」になります)、次にパスをストロークします。これは、他のほとんどのソリューションと比較して非常に高速です(ただし、それ自体は高速化できます)。
これがすべて気が遠くなるように思われる場合は、おそらく他の誰かがより簡単な解決策を持っているか、またはあなたは賞金を提供して、誰か(私のような)が実際にあなたのためにすべてをコーディングするかどうかを確認できます。
EDIT2:
これは、インジケーターラインを実行するビューのコードです(見やすくするために赤い線を使用しました。この配列は色を設定します:{1、0、0、R / G / Bスペース)
#import "SlideLine.h"
#define LINE_WIDTH 1.0f
@implementation SlideLine
@synthesize showLine, x;
- (void)drawRect:(CGRect)rect
{
if(!showLine) return;
CGRect bounds = self.bounds;
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(c, LINE_WIDTH);
// draws two slightly transparent lines on either side to soften the look
for(int i=0; i<3; ++i) {
CGFloat val[4] = { 1, 0, 0, i==1 ? 1 : 0.5f}; // half alpha for each side line
CGContextSetStrokeColor(c, val);
CGFloat xx = x - LINE_WIDTH/2 - 1 + i;
CGContextMoveToPoint(c, xx, 0);
CGContextAddLineToPoint(c, xx, bounds.size.height);
CGContextStrokePath(c);
}
}
- (void)setShowLine:(BOOL)val
{
showLine = val;
[self setNeedsDisplay];
}
@end
速度を変更するためのコントロールなどを使用して、その使用方法を示すXcodeプロジェクトを作成しました。

EDIT3:それで、アニメーションを使用するように変更を開始しましたが、残念ながら完全には焼き付けられていません。アイデアは、マーカーライン(幅3ピクセル)を取得して、単一のビュー(幅3ピクセル)にすることです。新しいSlidingLineControllerは、所有者から更新を取得し(オーディオコールバックによって駆動されます)、xがいつどこにあるべきか(つまりレート)をコントローラーに通知します。次に、コントローラーはそのレートを使用してマーカーをアニメーション化し、指定された時間にマーカーが配置されるようにします。更新が行われると、アニメーションレートがわずかに速くなったり遅くなったりするため、絶対位置は常に希望の位置に近くなります。
これはオリジナルよりも優れたテクニックのように見えますが、実際にはオリジナルよりも「途切れ途切れ」に見えます。おそらく最適な解決策は、レイヤー(ビューではなく)を使用してアニメーション化し、開始して再起動するのではなく、移動時にターゲットとレートを更新することです。おそらく、この2番目のプロジェクトでは、最初の手法を使用して、同じレート管理の概念を使用して30fpsのレートで自分自身を再描画することができます。残念ながら、これを追求する時間がなくなったので、これはまもなく期限切れになります。
編集:4さて、私は別の更新を行い、上記のようにコントローラーを使用して30 fpsの速度で再描画しましたが、かなりうまく機能しています-まだ完了していませんが、3番目のスピンでかなりスムーズであることがわかります