2011-03-25 13 views
6

पर काम नहीं करता है, मैंने अपने UIView के आस-पास एक बिंदीदार सीमा प्राप्त करने के लिए कुछ घंटे की कोशिश की है, लेकिन मुझे इसे प्रदर्शित नहीं किया गया है।
ScaleOverlay.hUIView सबक्लास में उपयोग किए गए CAShapeLayer

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@interface ScaleOverlay : UIView <UIGestureRecognizerDelegate> { 
    CAShapeLayer *shapeLayer_; 
} 
@end 

ScaleOverlay.m

- (id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 
if (self) { 
    self.backgroundColor = [UIColor redColor]; 
    self.alpha = 0; 
    //Round corners 
    [[self layer] setCornerRadius:8.f]; 
    [[self layer] setMasksToBounds:YES]; 
    //Border 
    shapeLayer_ = [[CAShapeLayer layer] retain]; 

    CGMutablePathRef path = CGPathCreateMutable(); 
    CGPathAddRect(path, NULL, frame); 
    shapeLayer_.path = path; 
    CGPathRelease(path); 
    shapeLayer_.backgroundColor = [[UIColor clearColor] CGColor]; 
    shapeLayer_.frame = frame; 
    shapeLayer_.position = self.center; 

    [shapeLayer_ setValue:[NSNumber numberWithBool:NO] forKey:@"isCircle"]; 
    shapeLayer_.fillColor = [[UIColor blueColor] CGColor]; 
    shapeLayer_.strokeColor = [[UIColor blackColor] CGColor]; 
    shapeLayer_.lineWidth = 4.; 
    shapeLayer_.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:8], [NSNumber numberWithInt:8], nil]; 
    shapeLayer_.lineCap = kCALineCapRound; 
} 
return self; 
} 

मैं अपने Superview में तैयार एक लाल रेक्ट नहीं बल्कि सीमा मिला है। आशा है कि यह काम करेगा, लेकिन यह नहीं करता है।

उत्तर

16

आप अपनी UIView की परत के एक उपन्यास के रूप में कभी भी shapeLayer जोड़ते हैं, इसलिए यह कभी भी स्क्रीन पर प्रदर्शित नहीं होता है। आप अपने -initWithFrame: विधि में अपने CAShapeLayer सेट करने के बाद

[self.layer addSublayer:shapeLayer_]; 

जोड़ने का प्रयास करें।

और भी बेहतर, आप निम्नलिखित वर्ग विधि अधिभावी द्वारा अपने UIView के समर्थन परत एक CAShapeLayer बनाने की कोशिश कर सकते:

+ (Class) layerClass 
{ 
    return [CAShapeLayer class]; 
} 

इसके बाद आप सीधे देखने की परत के साथ सौदा कर सकता है, और अतिरिक्त CAShapeLayer उदाहरण चर को समाप्त।

+0

विश्वास नहीं कर सकता कि मैं '[self.layer addSublayer: shapeLayer _] भूल गया था, और इसके लिए दिनों की खोज – Seega

+1

आप कुछ कारणों से बैकिंग परत के रूप में CAShapeLayer का उपयोग नहीं कर सकते। – openfrog

+0

@openfrog मैं यह वही व्यवहार देख रहा हूं। बहुत अजीब ... – LucasTizma

संबंधित मुद्दे