UIScrollViewのスケールファクタを知ったので、ズームインした後にデータを再レンダリングできるという人がいるようです。あなたのレイヤーをCATiledLayerにし、levelsOfDetailBiasとlevelsOfDetailを設定することについての記事もあります。UIScrollViewのズームイン後のコンテンツのレンダリング
私は何を持っていることはUIScrollViewのであり、それには、UIViewのサブクラスですResultsView:私はUIScrollViewのとResultsViewを持っている私のクラスで
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
CATiledLayer *tiledLayer = (CATiledLayer *)self.layer;
tiledLayer.levelsOfDetailBias = 3;
tiledLayer.levelsOfDetail = 3;
self.opaque = YES;
}
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
+ (Class)layerClass {
return [CATiledLayer class];
}
、私は:
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return self.ResultsView;
}
を
テキストを再レンダリング(シャープ)するには十分ですか?または、何かを実装する必要がありますか?
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
}
もしそうなら、どうすればよいか分かりません。私のクラスUIScrollViewとResultsView、ResultsView(XIB)で、私はちょうどUILabelsとUIViews(UIViews見出し/フッターのビューに使用)があります。だから私はResultsViewからそれらを再描画する方法を知らない。 ResultsViewはXIBでUILabelsとUIViewを子として持っていますが、どのようにそれらをResultsViewクラスから再描画するのか、とにかく何をする必要があるのか分かりません。
これは間違ったアプローチですか? scrollViewDidEndZoomingのデリゲートメソッドでスケールファクタでUILabelとUIViewのサイズを変更するだけですか? TIA
ありがとうございます。本当にうまくいった。私は自分でこのタイプの答えを見つけたとは思わない。最初のラインスケールが必要な理由を説明できますか?= ...ウィンドウ/スクリーン/スケールが返す値はデバイスごとに異なりますか?ありがとう。 –
はい、それは網膜ディスプレイと互換性があります。 iPadおよびRetinaディスプレイのiPhone/iPodタッチでは、ウィンドウ画面の縮尺が1.0になるため、効果はありません。網膜ディスプレイでは2.0ですので、それらのディスプレイのスケールを適切に調整します。 – afarnham
さらに洗練されたアプローチは、UIViewのサブクラスをズームしているビューを作成していない場合は作成し、各サブビューにすべてのサブビューをループするのではなく直接contentScaleFactorを更新するように指示するメソッドを作成することです。 setNeedsDisplayと同様にカスタム描画を行ういくつかのサブビューがあれば、よりきめ細かな制御が可能です。 – afarnham