2013-02-18 20 views
10

Ho un UIView in cui vorrei disegnare un Cerchio che si estende oltre il fotogramma di UIView, Ho impostato i masksToBounds su NO - aspettandomi di poter passare oltre i limiti di UIView di 5 pixel a destra e in basso.Disegno all'esterno di un UIView

Mi aspetto che l'ovale non venga ritagliato ma viene troncato e non si disegna oltre i limiti?

- (void)drawRect:(CGRect)rect 
{ 

    int width = self.bounds.size.width; 
    int height = self.bounds.size.height; 
    self.layer.masksToBounds = NO; 

    //// Rounded Rectangle Drawing 
    //// Oval Drawing 
    UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(0, 0, width+5, height+5)]; 
    [[UIColor magentaColor] setFill]; 
    [ovalPath fill]; 
    [[UIColor blackColor] setStroke]; 
    ovalPath.lineWidth = 1; 
    [ovalPath stroke]; 

} 

enter image description here

risposta

18

Da http://developer.apple.com/library/ios/#documentation/general/conceptual/Devpedia-CocoaApp/DrawingModel.html

UIView e NSView configurare automaticamente l'ambiente di disegno di una vista prima della sua drawRect: viene richiamato il metodo. (Nel framework AppKit, , la configurazione dell'ambiente di disegno si chiama messa a fuoco bloccante.) Come parte di questa configurazione, la classe vista crea un contesto grafico per l'ambiente di disegno corrente.

questo contesto grafico è un oggetto al quarzo (CGContext) che contiene le informazioni del sistema di disegno richiede, come ad esempio i colori da applicare, la modalità di disegno (tratto o riempimento), spessore della linea e le informazioni di stile, le informazioni sui font , e opzioni di compositing. (Nell'appKit, un oggetto della classe NSGraphicsContext include un oggetto CGContext.) Un oggetto di contesto di grafica è associato a una finestra, bitmap, file PDF o altro dispositivo di output e conserva informazioni sullo stato corrente del disegno ambiente per quell'entità. Una vista si disegna usando un contesto grafico associato alla finestra della vista. Per una vista, il contesto consente di impostare l'area di ritaglio predefinita in modo che coincida con i limiti della vista e inserisce l'origine di disegno predefinita all'origine dei limiti di una vista di .

Una volta impostata la regione di ritaglio, è possibile ridurla solo di più. Quindi, ciò che stai cercando di fare non è possibile in una URItabella drawRect :.

0

Io non sono certo questo sarà risolvere il problema, ma è qualcosa di esaminare. Stai impostando self.layer.masksToBounds = NO ogni volta che inserisci drawRect. Dovresti provare ad impostarlo all'interno del metodo init solo una volta invece, A) perché non è necessario farlo più volte e B) perché forse c'è un problema con l'impostazione dopo che drawRect è già stato chiamato - chissà.

+0

Ho provato che - non ha funzionato ... – OneGuyInDc

+0

self.layer.masksToBounds = NO non aiuta il ritaglio – pixelrevision