Frage

Ich versuche, einen Clipping-Bereich in einem UIView zu erzeugen, die von Pfadobjekten in seiner Subviews erzeugt wird. Zum Beispiel könnte ich ein Subview, die einen Platz haben und ein anderer einen Kreis enthält. Ich möchte in der Lage, einen Clip in der übergeordneten Super zu erzeugen, die die Vereinigung dieser beiden Formen ist. Kann jemand erklären, wie dies zu tun? Über alle habe ich in der Lage gewesen, so weit, um herauszufinden, ist, dass:

1 - der drawRect des Superview: Methode wird aufgerufen, bevor seine Subviews' drawRects ist, und
. 2 - die contextRef, die in allen drei Fällen das gleiche ist

zugänglich ist

Anders als das ich ratlos bin. Danke,
Howard

War es hilfreich?

Lösung

Auf den Punkt gebracht, müssen Sie durchlaufen alle Subviews und lassen Sie jeder den aktuellen Kontext Pfad ändern, dann eingestellt, dass Pfad als Beschneidungspfad. Sie könnten aus jeder Ansicht für einen Weg fragen oder um den Kontext zu jeder Ansicht übergeben.

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState( context );
CGContextBeginPath( context );

for ( view in subviews ) {
  if ( [view respondsToSelector:@selector(pathTranslatedForView:)] ) {
    CGContextAddPath( context , [(MyCustomViewPath *)view pathTranslatedForView:self] );
  }
}

CGContextClip( context );
// do stuff with clipping path
CGContextRestoreGState( context );

Edit:

Wenn die subview Aufruf, können Sie den Kontext anzupassen, so dass 0,0 ist der Ursprung der aufgerufenen Ansicht, nicht die Superview:

CGRect frame = [view frame];
CGContextTranslateCTM( context , -frame.origin.x , -frame.origin.y );
CGContextAddPath( context , [(MyCustomViewPath *)view path]; 
CGContextTranslateCTM( context , frame.origin.x , frame.origin.y );

Andere Tipps

Vielleicht versuchen, die Hintergrundfarbe zu setzen .clear: die UIView - Rechteck wird Leasing verschwindet nur die Pfadform

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top