2013-02-18 24 views
10

Ich habe eine UIView, wo ich einen Kreis zeichnen möchte, der über den Rahmen der UIView hinausgeht, Ich habe die masksToBounds auf NO gesetzt - erwarte, dass ich außerhalb der Grenzen der UIView vorbei ziehen kann 5 Pixel rechts und unten.Zeichnung außerhalb einer UIView

Ich erwarte, dass das Oval nicht abgeschnitten wird, aber es wird abgeschnitten und zeichnet nicht außerhalb der Grenzen?

- (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

Antwort

18

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

UIView und NSView automatisch die Zeichnungsumgebung einer Ansicht vor seinem drawRect konfiguriert: Methode aufgerufen wird. (Im AppKit-Framework wird Konfigurieren der Zeichenumgebung als Sperrfokus bezeichnet.) Als Teil dieser Konfiguration erstellt die Ansichtsklasse einen Grafikkontext für die aktuelle Zeichenumgebung.

Dieser Grafikkontext ist ein Quarz-Objekt (CGContext), die Informationen des Zeichensystem erfordert, wie die Farben enthält anzuwenden, den Zeichenmodus (Schlaganfall oder füllen), Linienbreite und Stilinformationen, Schriftinformationen, und Compositing-Optionen. (In dem AppKit umschließt ein Objekt der NSGraphicsContext-Klasse ein CGContext-Objekt.) Ein Grafikobjekt ist mit einem Fenster, einer Bitmap, PDF-Datei oder einem anderen Ausgabegerät verknüpft und enthält Informationen über den aktuellen Status der Zeichnung Umgebung für diese Entität. Eine Ansicht zeichnet mit einem Grafik- -Kontext, der dem Fenster der Ansicht zugeordnet ist. Für eine Ansicht legt die Grafik context fest, dass die Standard-Clipping-Region mit den Grenzen der Ansicht übereinstimmt, und legt den Standard-Zeichenursprung am Ursprung der Grenzen einer Ansicht fest.

Sobald der Clipping-Bereich festgelegt ist, können Sie ihn nur verkleinern. Was Sie also versuchen, ist in einem UIView-DrawRect nicht möglich.

0

Ich bin nicht sicher, dass dies Ihr Problem zu beheben, aber es ist etwas zu schauen. Sie setzen self.layer.masksToBounds = NO jedes Mal, wenn Sie drawRect eingeben. Sie sollten versuchen, es nur einmal innerhalb der init-Methode zu setzen, A) weil es unnötig ist, es mehrmals zu tun und B) weil vielleicht ein Problem mit der Einstellung besteht, nachdem drawRect bereits aufgerufen wurde - wer weiß.

+0

Ich habe das versucht - hat nicht funktioniert ... – OneGuyInDc

+0

self.layer.masksToBounds = NO wird nicht helfen, Clipping – pixelrevision

Verwandte Themen