如何从uiview切割星形部分?

时间:2014-05-06 07:36:01

标签: ios objective-c uiview

我目前有一个UIView和一个imageview背后:我想做的是能够" cut"在UIView上显示STAR形状,以便可以看到Imageview。你是如何做到的?

现在我能够切割一个矩形或圆形但不知道星形或多边形 所以如果有人知道任何事情,请提前分享... thanx

3 个答案:

答案 0 :(得分:1)

Woof

我很确定你需要使用图像蒙版。这是一个只包含黑色形状(在您的情况下是一个明星)在白色背景上的图像。请参阅此处的教程:http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

在这种情况下,UIImageView需要位于UIView之上,然后使用上述链接中的方法进行屏蔽。据我所知,没有一种简单的方法可以从视图中“切割”一个形状,但这种方法应该会给你带来同样的效果。

如果你想在运行时更多地控制形状,另一个选择是将一个星形绘制为CGShape并将其用作你的面具。

答案 1 :(得分:0)

创建形状图层

CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
    [shapeLayer setFrame:CGRectMake(10, 10, 50, 50)];
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    [bezierPath moveToPoint:CGPointMake(12, 25)];
    [bezierPath addLineToPoint:CGPointMake(25, 12)];
    [bezierPath addLineToPoint:CGPointMake(38, 25)];
    [bezierPath addLineToPoint:CGPointMake(25, 38)];
    [bezierPath closePath];
    [shapeLayer setPath:bezierPath.CGPath];

以上bezier路径具有随机点,创建您自己的星形版本并根据您的星位和大小设置框架。

将图层遮盖到视图中

[[yourView layer] setMask:shapeLayer];

答案 2 :(得分:0)

如果你想画一个星形图像..我非常确定这段代码真的可以帮到你。

这两行负责起点和终点:

CGContextMoveToPoint();
CGContextAddLineToPoint();


CGContextClosePath() : is used to close the current subpath of the context's path.

- (void)drawRect:(CGRect)rect
{

    CGContextRef contextRef=UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(contextRef, 2);
    CGContextSetStrokeColorWithColor(contextRef, [UIColor redColor].CGColor);

    CGContextBeginPath(contextRef);
    CGContextMoveToPoint(contextRef, 50.0, 440.0);
    CGContextAddLineToPoint(contextRef, 100.0, 440.0);
    CGContextAddLineToPoint(contextRef, 75.0, 380.0);
    CGContextClosePath(contextRef);
    CGContextMoveToPoint(contextRef, 50.0, 400.0);
    CGContextAddLineToPoint(contextRef, 100.0, 400.0);
    CGContextAddLineToPoint(contextRef, 75.0, 460.0);
    CGContextClosePath(contextRef);
    [[UIColor grayColor]setFill];
    CGContextStrokePath(contextRef);
    CGContextFillPath(contextRef);

}