background colorWithPatternImage endet gestreckten, wenn die Größenänderungen, statt zu wiederholen?

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

  •  07-07-2019
  •  | 
  •  

Frage

Ich gründe einen Blick Hintergrund auf ein sich wiederholendes Bild mit colorWithPatternImage. Wenn die Größenänderungen, nachdem ich den Hintergrund zum ersten Mal festgelegt haben, wird das Bild gestreckt, statt für die neue Größe des Wiederholens - irgendwelche Ideen, wie ich dieses Problem beheben

Das ist, was ich tue:

  • nach Ansicht der Hintergrund in viewDidLoad gesetzt:

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

  • einige Informationen aus dem Server packen, die Ansicht aktualisieren, die Rahmengröße der Ansicht ändern, um die neuen Inhalte zu passen (in der Regel bedeutet dies die Ansicht größer zu machen)

  • Hintergrundbild nun gespannt ist, auch wenn ich die Backgroundcolor wieder stellen Sie den exakt gleichen Code.

Wenn ich nicht das ursprüngliche Hintergrund-Set tun, und es nur gesetzt, nachdem ich die Daten vom Server abrufen und die Ansichtsgröße ändern, es sieht gut aus - Wiederholungen und keine Dehnung. Doch das bedeutet keinen Hintergrund, während die Daten geladen ... sieht hässlich aus.

Hat jemand sonst laufen in das?

Vielen Dank für jede Hilfe!

War es hilfreich?

Lösung

Die Antwort ist ganz einfach, rufen Sie einfach

[[self view] setNeedsDisplay];

in der Steuerung, wenn Sie die Bildgröße zu ändern (oder wo auch immer Sie es tun, unterm Strich ist es, eine setNeedsDisplay Nachricht zu der Ansicht nach dem Bildwechsel senden). Wenn dies nicht funktioniert - versuchen, die Hintergrundfarbe einstellen.

Und wenn das nicht funktioniert, implementieren Ihre eigene Ansicht und darin die Methode überschreibt

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

Und dann, nach dem Ändern der Größe, die setNeedsDisplay zu Ihrer Ansicht senden. Dies wird für 100% arbeiten.

Hope, das war hilfreich, Pawel

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top