【问题标题】:iphone UIbezierpath irregular image croppingiphone UIbezierpath 不规则图像裁剪
【发布时间】:2012-09-22 02:41:08
【问题描述】:

我正在为 iPhone 创建一个拼图游戏。

这里我必须像下图一样裁剪图像

在谷歌搜索之后,我知道 uibezier 路径是裁剪不规则形状图像的最佳路径。

但是我没有得到任何代码或想法来像上面那样裁剪图像。

【问题讨论】:

标签: iphone objective-c uiimage crop uibezierpath


【解决方案1】:

这需要大量的尝试和错误,我很快就这样做了,只是为了让您了解如何使用贝塞尔路径创建形状。下面是创建我快速创建的正方形的示例代码

 UIBezierPath *aPath = [UIBezierPath bezierPath];

    // Set the starting point of the shape.
    [aPath moveToPoint:CGPointMake(50.0, 50.0)];
    // Draw the lines.
    [aPath addLineToPoint:CGPointMake(100.0, 50.0)];
    [aPath addLineToPoint:CGPointMake(100.0, 100.0)];
    [aPath addLineToPoint:CGPointMake(50.0, 100.0)];
    [aPath closePath];

    CAShapeLayer *square = [CAShapeLayer layer];
    square.path = aPath.CGPath;
    [self.view.layer addSublayer:square];

如果我有更多时间,我可以创建图像,但是因为没有太多时间,所以很快就完成了。一旦你了解了积分是如何产生的,它就不会太难使用。创建此形状将花费您大量的试验和错误,但使用我提供的代码作为如何使用贝塞尔路径创建形状的基础。您将需要创建更多点才能最终得到您想要的形状。

我还建议查看 Apples 开发者指南以创建不规则形状

http://developer.apple.com/library/ios/#documentation/2ddrawing/conceptual/drawingprintingios/BezierPaths/BezierPaths.html

特别是查看“将曲线添加到您的路径”​​以了解如何创建曲线并将它们添加到您的图像中。您将需要它来创建您尝试创建的拼图块形状

编辑:

试试这个方法

- (void) setClippingPath:(UIBezierPath *)clippingPath : (UIImageView *)imgView;
{
    if (![[imgView layer] mask])
        [[imgView layer] setMask:[CAShapeLayer layer]];

    [(CAShapeLayer*) [[imgView layer] mask] setPath:[clippingPath CGPath]];
}

上述方法将采用贝塞尔路径和 ImageView,然后将贝塞尔路径应用到特定的 imageView。它也会进行剪辑。我认为要获得正确的形状需要大量的试验和错误,有时创建复杂的形状可能会很困难且令人沮丧。

应用此代码的快速示例

UIBezierPath *aPath = [UIBezierPath bezierPath];
    // Set the starting point of the shape.
    [aPath moveToPoint:CGPointMake(0.0, 0.0)];
    // Draw the lines.
    [aPath addLineToPoint:CGPointMake(50.0, 0.0)];
    [aPath addLineToPoint:CGPointMake(50.0, 50.0)];
    [aPath addLineToPoint:CGPointMake(0.0, 50.0)];
    [aPath closePath];

    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bar.png"]];
    imgView.frame = CGRectMake(0, 0, 100, 100);
    [self setClippingPath:aPath :imgView];
    [self.view addSubview:imgView];

刚刚从图像的左上角快速制作了一个正方形。例如,如果您有一个正方形图像,您可以遍历图像的宽度和高度,使用上面的代码裁剪成单独的正方形并单独返回它们。创建拼图块要复杂得多,但希望这会有所帮助

【讨论】:

  • 非常感谢您的回复,并花时间回答我的问题,这真的很有意义。是的,现在很清楚我应该走哪条路,这里我的另一个问题是裁剪图像。你对此有什么想法吗?使用此 uibezier 路径绘制曲线裁剪?
  • 我只想将此模式与 uiimage 匹配,我只想用该模式裁剪图像
  • 查看我的编辑,我提供了一种方法,您可以使用该方法将采用贝塞尔路径和 imageView 并为您进行剪辑。希望有帮助
  • 太棒了。工作正常。多谢。这很简单,但我认为我需要在指定形状贝塞尔路径中裁剪图像方面做很多工作。
  • 是的,要恰到好处地裁剪形状可能很困难,只是需要时间祝你好运!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2012-09-26
  • 2012-01-31
  • 2011-09-12
  • 1970-01-01
  • 2017-08-06
相关资源
最近更新 更多