backgroundColor colorWithPatternImage finisce allungato se la dimensione della vista cambia, invece di ripetere?

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

  •  07-07-2019
  •  | 
  •  

Domanda

Sto impostando uno sfondo di visualizzazione su un'immagine ripetuta usando colorWithPatternImage. Se la dimensione della vista cambia dopo che ho impostato lo sfondo per la prima volta, l'immagine viene allungata invece di ripetere per la nuova dimensione - hai idea di come posso risolvere questo problema?

Questo è quello che sto facendo:

  • imposta lo sfondo della vista in viewDidLoad:

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

  • prendi alcune informazioni dal server, aggiorna la vista, cambia le dimensioni della cornice della vista per adattarla al nuovo contenuto (di solito, questo significa rendere la vista più alta)

  • l'immagine di sfondo è ora allungata, anche se ho impostato nuovamente backgroundColor usando lo stesso codice esatto.

Se non eseguo il set di sfondo iniziale e lo imposto solo dopo aver recuperato i dati dal server e aver modificato le dimensioni della vista, sembra fantastico: si ripete e non si allunga. Tuttavia, ciò significa che non c'è sfondo durante il caricamento dei dati ... sembra brutto.

Qualcun altro ha incontrato questo?

Grazie per l'aiuto!

È stato utile?

Soluzione

La risposta è abbastanza semplice, basta chiamare

[[self view] setNeedsDisplay];

nel controller quando si cambiano le dimensioni del frame (o ovunque lo si faccia, la linea di fondo è di inviare un messaggio setNeedsDisplay alla vista dopo il cambio del frame). Se non funziona, prova a impostare il colore di sfondo.

E se questo non funziona, implementa la tua vista personalizzata e in essa sovrascrivi il metodo

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

Quindi, dopo il ridimensionamento, invia setNeedsDisplay alla tua vista. Funzionerà al 100%.

Spero che sia stato utile, Pawel

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top