2014-10-13 15 views
8

Ho bisogno di creare un UIView che abbia il bordo sinistro inclinato con 45 gradi Mi chiedevo, c'è un modo per ottenere questo a livello di programmazione? CATransform3D aiutarmi in questo caso poiché non è realmente una "rotazione 3D"?Creare un UIView con un solo lato diagonale

Modifica

Ecco un'immagine spiegando di più la mia uscita necessario

enter image description here

+0

Questo potrebbe essere interpretato in molti modi. Hai una foto di ciò che vuoi. Questo potrebbe essere un triangolo rettangolo, o un rombo, ecc. Tutto programmaticamente possibile senza usare le trasformazioni ma avremo bisogno di un'immagine (o una spiegazione migliore) per poter rispondere. – Fogmeister

+1

L'uso di una trasformazione distorce il contenuto della vista e probabilmente non è quello che desideri. –

+0

Grazie per la tua risposta @Fogmeister, ho aggiunto un'immagine – Odin

risposta

12

Se si desidera solo la forma senza contenuto, è possibile creare uno CAShapeLayer e aggiungerlo al livello della vista. (In effetti puoi anche inserire contenuti in questo metodo, ma dovrai modificarlo un po ').

CAShapeLayer *layer = [CAShapeLayer layer]; 

UIBezierPath *path = [UIBezierPath bezierPath]; 
[path moveToPoint:CGPointMake(0, 100)]; // bottom left corner 
[path addLineToPoint:CGPointMake(100, 0)]; // top middle 
[path addLineToPoint:CGPointMake(300, 0)]; // top right corner 
[path addLineToPoint:CGPointMake(300, 100)]; // bottom right corner 
[path closePath]; 

layer.path = path.CGPath; 
layer.fillColor = [UIColor blackColor].CGColor; 
layer.strokeColor = nil; 

[theView.layer addSubLayer:layer]; 

Questo non richiede l'utilizzo di drawRect o altro. Dovrai cambiare le coordinate in base ai valori che desideri.

È inoltre possibile utilizzare una sottoclasse UIView e sostituire drawRect. Richiede più lavoro ma lo UIBezierPath sarà praticamente lo stesso.

CALayer è molto potente e utilizzato molto da Apple. Ad esempio la tela di modifica in Pages è scritta quasi esclusivamente usando CALayer s.

+0

Questa è un'ottima risposta !! Proprio quello di cui ho bisogno. Grazie mille @Fogmeister – Odin

+0

@Chris non preoccuparti, felice di aiutare.Grazie – Fogmeister

+0

@Fogmeister quando hai detto che devi modificare un po 'il metodo per includere il contenuto, cosa intendevi esattamente? Sto cercando di fare qualcosa di molto simile a questo, ma con contenuto all'interno di – Alk

0

via più breve per raggiungere questo obiettivo è probabilmente quello di adottare le seguenti misure:

  1. sottoclasse UIView
  2. Override drawRect per fornire il vostro disegno personalizzato per la vista
  3. In drawRect, utilizzare il Core Graphics API, che permette di disegnare forme personalizzate in un contesto disegno, e offre funzioni quali rotation o scaling

Here is an overview of the API from the Apple docs.

Problemi correlati