backgroundColor colorWithPatternImageは、繰り返しではなく、ビューのサイズが変更されると引き伸ばされますか?

StackOverflow https://stackoverflow.com/questions/1418735

  •  07-07-2019
  •  | 
  •  

質問

colorWithPatternImageを使用して、繰り返し画像にビューの背景を設定しています。初めて背景を設定した後にビューのサイズが変わると、画像は新しいサイズで繰り返される代わりに引き伸ばされます-これを修正する方法はありますか?

これは私がやっていることです:

  • viewDidLoadでビューの背景を設定します:

    frameView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@" frame-repeat.png"]];

  • サーバーからいくつかの情報を取得し、ビューを更新し、新しいコンテンツに合わせてビューのフレームサイズを変更します(通常、これはビューを高くすることを意味します)

  • まったく同じコードを使用してbackgroundColorを再度設定しても、
  • 背景画像は引き伸ばされます。

最初の背景設定を行わず、サーバーからデータを取得してビューサイズを変更した後にのみ設定すると、見栄えがよくなります-繰り返し、ストレッチなし。ただし、これはデータのロード中にバックグラウンドがないことを意味します... looksいように見えます。

他の誰かがこれに遭遇していますか?

ご協力ありがとうございます!

役に立ちましたか?

解決

答えは非常に簡単です。電話するだけです

[[self view] setNeedsDisplay];

フレームサイズを変更するときのコントローラーで(または、どこでも、一番下の行は、フレームの変更後にsetNeedsDisplayメッセージをビューに送信することです)。 これが機能しない場合-背景色を設定してみてください。

これが機能しない場合は、独自のカスタムビューを実装し、その中でメソッドをオーバーライドします

- (void) drawRect:(CGRect) rect {
   CGRect myBounds = self.bounds;
   CGContextRef context = UIGraphicsGetCurrentContext();
   [[UIColor colorWithPatternImage:[UIImage imageNamed:@"frame-repeat.png.png"]]set];
   CGContextFillRect(context, myBounds);
}

そして、サイズ変更後、setNeedsDisplayをビューに送信します。これは100%で機能します。

これが役に立ったと思います、Pawel

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top