Domanda

Voglio realizzare i confini di dialogo che scala per le dimensioni ho bisogno la finestra di dialogo per essere. Forse c'è un nome migliore più convenzionale per questo genere di cose. Se c'è, se qualcuno modificare il titolo, sarebbe fantastico.

In ogni caso, mi piacerebbe fare questo in modo che io possa avere le finestre di dialogo di qualsiasi dimensione senza gli artefatti visivi che vengono con il ridimensionamento arte bordo di piccole, grandi, o stravaganti Dimensioni sproporzionata. Ho un paio di idee su come questo viene fatto, ma non sono sicuro che è meglio per iPhone. Ho un paio di domande.

1) Devo fare una vista oggetto contenente tale sostanza sovraccarica il suo metodo drawRect e disegna le immagini dove dovrebbero essere a loro scala appropriata quando il metodo viene chiamato, o devo principale a contenente vista oggetto che semplicemente contiene 8 UIImageViews? Ho il sospetto che quest'ultimo approccio non funziona se ho bisogno di scalare attivamente la classe finestra di dialogo visualizzata come in un'animazione.

1b) Se sovraccaricare drawRect è la strada da percorrere, fa qualcuno ha qualche esempio di codice o un collegamento a un esempio che dimostra tracciando un'immagine direttamente da drawRect ()?

2) E 'generalmente migliore per creare

a) un'immagine di 3 x 3 in cui i segmenti sono nella loro griglia appropriate 1x1 dell'immagine? Se è così, è più semplice per disegnare da una porzione di questa immagine sul mio vista di destinazione in drawRect (se la prima ipotesi è corretta che dovrei usare drawRect)?

b) I pezzi separatamente in 8 file diversi?

UPDATE: Per chiarire, l'idea è di prendere qualsiasi motivo di bordo personalizzato e poter allungare il 2, 4, 6, e 8 cellule (in una griglia 3x3 celle) per formare un bordo di qualsiasi dimensione con soli tali attività. Allungamento solo un'immagine normale comporterebbe distorsione degli angoli, così vorrei allungare quelle cellule anche numerati come necessario e tack sugli angoli quindi non c'è distorsione. Avevo visto questo fatto prima quindi ho pensato che potrebbe essere una cosa normale e hanno una denominazione standard ad esso diverso da quello che ho chiamato.

In ogni caso, mi è stato consigliato che l'aggiunta di 8 UIImageViews a un contenitore non sarebbe efficiente come disegnare le UIImages al volo in drawRect quindi preso questo approccio utilizzando CGContextDrawImage () dopo aver applicato le trasformazioni necessarie al contesto di tradurre e scalare la Y. Poiché questa funzione disegna dal basso a sinistra di un'immagine, ma su un alto a sinistra originato UIView, l'immagine è capovolta senza l'asse Y invertito. Ho notato il suggerimento di utilizzare le funzioni UIImage come drawAtPoint funziona bene e, analogamente, ma per l'invertito dal UIImage aspira lo stesso orientamento UIViews. Io continuerò la mia applicazione con l'ex e vedere come va, ma un altro problema.

Qualcuno capita di sapere quale di questi approcci è più efficeint, più veloce, etc?

È stato utile?

Soluzione

Non sono sicuro che io seguo, ma qui è il mio colpo ad una risposta ...

migliore

Utilizzando drawRect: o l'aggiunta di singoli UIImageViews ad una vista genitore è interamente a voi. UIImageView ti dà un po 'di funzionalità incapsulata per libero, ma per il resto sono gli stessi per quanto riguarda le apparenze vanno.

Se si vuole andare via drawRect, basta usare di UIImage drawAtPoint: metodo. Fare la matematica per cui si desidera che sia, e disegnarlo. È possibile calcolare i punti in base alle dimensioni della vista padre.

Per quanto riguarda il ridimensionamento, è impossibile ridimensionare queste immagini senza scala, quindi mi piacerebbe pianificare in anticipo e fare gli originali più grande o più grande di quanto mai aspettate per visualizzarli.

La speranza che aiuta un po '?

Saluti

Altri suggerimenti

Se si desidera un bordo su una finestra di dialogo, supponendo che la scatola è un UIView (o sottoclasse), quindi impostare proprietà del bordo del livello e lasciare che il sistema di disegnare il bordo per voi.

#import <QuartzCore/QuartzCore.h> 
// ... 

view.layer.borderWidth = 2;
view.layer.borderColor = [UIColor whiteColor].CGColor; 
view.layer.cornerRadius = 0;  // 0=square corners, >0 for rounded
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top