2009-10-13 11 views
6

ich möchte eine border/shadow um eine uiscrollview zeichnen, ich weiß, dass ich dort mit einer zusätzlichen ansicht oder scrollview aber nicht wie die handhabung ein rückstände aber ich hörte, dass es sein sollte eine Möglichkeit, einen Rahmen direkt zu einem Scrollview zu zeichnen, und das ist es, was ich bevorzugen würde.Shadow or Border um eine scrollview iphone

Ich bin leise neu auf iPhone Entwicklung, jede Antwort wäre hilfreich.

Antwort

17

Wenn Sie die Ebeneneigenschaft Ihrer Ansicht blättern (oder einem UIView) Sie leicht eine feste Grenze bekommen ...

#import <QuartzCore/QuartzCore.h> 
... 
myView.layer.borderWidth = 2; 
myView.layer.borderColor = [UIColor blackColor].CGColor; 

Sie können auch die Schicht verwenden Echtzeit-Schatten anzuwenden, indem Die layer.shadow* Eigenschaften, aber die Leistung kann mit dieser Technik langsam sein, so dass ich im Allgemeinen die folgende komplexere, aber performantere Technik bevorzugen. Sie können ein PNG-Bild mit Transparenz in der Mitte und Schatten um die Kante herum erstellen - es müssen 9 verschiedene Bereiche vorhanden sein: 4 für jede Ecke, 4 für jede Kante und ein vollständig transparenter 1x1 Pixelbereich in der Mitte. Wenn Ihr Schatten beispielsweise 6 Pixel in Ihr Bild hineinreicht, wäre Ihr Bild 13x13 mit den 6 Pixel breiten/hohen Rahmen und dem 1x1 Bereich in der Mitte. Dann setzen Sie es als skalierbare Bild mit:

newImage = [image stretchableImageWithLeftCapWidth:6 topCapHeight:6]; 

UPDATE: Seit iOS 5.0 stretchableImageWithLeftCapWidth:topCapHeight: veraltet ist, so dass nur diese verwenden, wenn Sie noch unterstützen iOS 4.x Geräte wollen. Wenn Sie iOS unterstützen wollen nur 5.0+ Geräte verwenden Sie stattdessen:

newImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)]; 

Dann legen Sie das Bild auf der übergeordneten Ansicht, so dass es den gesamten Bereich der Scroll-Ansicht in Anspruch nimmt. Wenn Sie möchten, dass die Schatten über Ihre scrollbaren Elemente gehen (sodass Ihre Bildlaufansicht in den/hinter den Rest der Seite zeigt), platzieren Sie eine transparente UIView über dem oberen Bild mit dem Schattenbild, so dass es durch Ihre Bildlaufansicht zeigt dahinter.

1

myView.layout.borderColor generiert eine inkompatible Zeigerwarnung bei der Verwendung von UIColor und änderte den Rahmen für mich nicht.

CGColorRef Mit arbeitete für mich statt:

CGFloat lComponents[4] = {0,0,0,1}; 
CGColorSpaceRef lColorSpace = CGColorSpaceCreateDeviceRGB(); 
myView.layer.borderColor = CGColorCreate(lColorSpace, lComponents); 
CGColorSpaceRelease(lColorSpace); 
2

Um die CGColorRef von einem UIColor erhalten Sie auch dieses Beispiel verwenden können:

myView.layer.borderWidth = 2; 
myView.layer.borderColor = [UIColor blackColor].CGColor; 
+0

genial, das hat den Trick gut für mich :) –

5

Vergessen Sie nicht zu:

#import <QuartzCore/QuartzCore.h> 

Wenn Sie

verwenden möchten