0

私はスタンフォード (iTunesU) から CS 193p コースを受講しており、Assigment 3 に提供される AxesDrawer クラス、特に drawHashMarksInRect メソッドのこれらの行の一部を理解しようとしています。

#define HASH_MARK_SIZE 3
#define MIN_PIXELS_PER_HASHMARK 25
+ (void)drawHashMarksInRect:(CGRect)bounds originAtPoint:(CGPoint)axisOrigin scale: (CGFloat)pointsPerUnit
{
.....
int unitsPerHashmark = MIN_PIXELS_PER_HASHMARK * 2 / pointsPerUnit;
if (!unitsPerHashmark) unitsPerHashmark = 1;
CGFloat pixelsPerHashmark = pointsPerUnit * unitsPerHashmark;
....
}

contentScaleFactor プロパティを使用せずに、ピクセルを操作していると彼らはどのように言いますか? 彼らは実際にピクセルを使用しているのか、単にポイントを使用しているだけなのか、用語を誤用していますか?. ここにAxesDrawerコードがあります

4

2 に答える 2

0

このクラスは、ポイントをポイントとして正しく処理しています。つまり、bounds.size.widthとbounds.size.heightは、iPhone3GS画面のピクセル単位のサイズと同じ寸法です。

添付の3Gにコンパイルする場合、コンテンツの倍率は1です。

iPhone 4または4sに接続している場合、コンテンツの倍率は2です。

ただし、AxesDrawerはスケールをpointsPerUnitと見なします。これは、iPhone 4では0.5であるため、渡すスケールは0.5です。

これを取得するには、グラフビューのUIViewクラスに以下を配置します。

CGFloat screenScale = self.contentScaleFactor;
CGFloat scaleForAxesDrawer = 1 / screenScale;
[[self.axes class] drawAxesInRect:graphArea originAtPoint:axisPoint scale:scaleForAxesDrawer];
// where graphArea is a CGRect and axisPoint is a CGPoint

例えば。

AxesDrawerは、25ピクセルごとに、軸に沿ってハッシュマークと番号を配置します。

于 2012-04-20T11:29:20.380 に答える
0

ただし、 contentScaleFactor はポイントあたりのピクセル数です。したがって、高解像度の場合、ポイントあたりのピクセル数が多くなります。しかし、私たちはポイントの範囲を扱っているので、システムは私たちを関与させずに自分で処理するべきではありませんか?

于 2015-02-25T07:07:42.217 に答える