簡體   English   中英

UIBezierPath不起作用

[英]UIBezierPath doesn't work

在我想到發布這個問題的想法之前,我已經在這小段代碼上花了幾個小時...因此,我在兩個不同的類中編寫了兩個不同的代碼段,並且都用來切出特定的形狀。 但是由於某種原因,其中只有一個工作! 我絕對不知道為什么會這樣,因為它們具有完全相同的結構。

以下是WORKS的代碼片段。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor blackColor];
        UIBezierPath *arrowPath = [UIBezierPath bezierPath];
        CGPoint start = CGPointMake(self.frame.size.width - 2, self.frame.size.height / 2);
        [arrowPath moveToPoint:start];
        [arrowPath addLineToPoint:CGPointMake(7, 7)];
        [arrowPath addLineToPoint:CGPointMake(2, 7)];
        [arrowPath addLineToPoint:CGPointMake(self.frame.size.width - 7, self.frame.size.height/2)];
        [arrowPath addLineToPoint:CGPointMake( 2, self.frame.size.height - 7)];
        [arrowPath addLineToPoint:CGPointMake(7, self.frame.size.height - 7)];
        [arrowPath addLineToPoint:start];
        [arrowPath closePath];
        UIView *arrow = [[UIView alloc]initWithFrame:self.frame];
        arrow.backgroundColor = [UIColor whiteColor];
        CAShapeLayer *mask = [CAShapeLayer layer];
        mask.frame = self.frame;
        mask.backgroundColor = (__bridge CGColorRef)([UIColor clearColor]);
        mask.path = arrowPath.CGPath;
        arrow.layer.mask = mask;
        [self addSubview:arrow];
        }
    return self;
}

這是僅部分起作用的代碼。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        UIView *roundedRectView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height - 20)];
        roundedRectView.backgroundColor = [UIColor clearColor];
        [self addSubview:roundedRectView];

        UIBezierPath *roundedRectPath = [UIBezierPath bezierPathWithRoundedRect:roundedRectView.frame cornerRadius:10];
        UIView *rectangle = [[UIView alloc]initWithFrame:roundedRectView.frame];
        rectangle.backgroundColor = [UIColor blackColor];
        CAShapeLayer *mask = [CAShapeLayer layer];
        mask.frame = rectangle.frame;
        mask.path = roundedRectPath.CGPath;
        mask.backgroundColor = (__bridge CGColorRef)([UIColor clearColor]);
        rectangle.layer.mask = mask;
        rectangle.alpha = 0.8;
        [roundedRectView addSubview:rectangle];

        UIView *rectangleTwo = [[UIView alloc]initWithFrame:CGRectMake(0, self.frame.size.height - 20, self.frame.size.width, 20)];
        rectangleTwo.backgroundColor = [UIColor redColor];
        UIBezierPath *trianglePath = [UIBezierPath bezierPath];
        CGPoint start = CGPointMake(rectangleTwo.frame.size.width / 2 - 15, 0);
        [trianglePath moveToPoint:start];
        [trianglePath addLineToPoint:CGPointMake(start.x + 20, start.y)];
        [trianglePath addLineToPoint:CGPointMake(start.x + 10, start.y + 20)];
        [trianglePath addLineToPoint:start];
        [trianglePath closePath];
        CAShapeLayer *triangleMask = [CAShapeLayer layer];
        triangleMask.frame = rectangleTwo.frame;
        triangleMask.path = trianglePath.CGPath;
        rectangleTwo.layer.mask = triangleMask;
        [self addSubview:rectangleTwo];
    }
    return self;
}

使用CGRectMake(0,0,80,60)分配此氣泡,只有圓角矩形顯示在屏幕上,但是三角形無處可見。

誰能指出這段代碼有什么問題嗎? 任何幫助表示贊賞,謝謝!

問題解決了! 原來我的triangleMask.frame沒有正確定義。 代替triangleMask.path = rectangleTwo.frame我應該已經使用triangleMask.frame = CGRectMake(0, 0, rectangleTwo.frame.size.width, rectangleTwo.frame.size.height); 代替! CAShapeLayer的原點與您要放置其的形狀有關!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM