在iOS中覆盖一张图片到另一张图片上

22

我正在我的iOS应用中展示来自YouTube的缩略图图像,点击后将跳转到YouTube。

我需要一种方法在这些图像上叠加播放按钮。最简单的方法是什么?

此外,这些图像是从远程加载到表格上的,因此性能是一个重要的考虑因素。


我们是否可以将覆盖图像放在缩略图图像视图的顶部?你试过了吗?我正在尝试同样的事情,很好奇你的解决方案是什么。 - user739711
4个回答

68

如果您关注表格的滚动性能,请获取缩略图并在其上绘制播放按钮。

+(UIImage*) drawImage:(UIImage*) fgImage
              inImage:(UIImage*) bgImage
              atPoint:(CGPoint)  point
{
    UIGraphicsBeginImageContextWithOptions(bgImage.size, FALSE, 0.0);
    [bgImage drawInRect:CGRectMake( 0, 0, bgImage.size.width, bgImage.size.height)];
    [fgImage drawInRect:CGRectMake( point.x, point.y, fgImage.size.width, fgImage.size.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

谢谢@jano!我会试一下的。实际上,我很惊讶在图像上绘制会如此高效。 - meow
注意在创建上下文时使用的0.0。使用0.0使得大小取决于主屏幕的比例。 - Luca Carlon
如果有人想将一张图片覆盖在另一张图片上,那么不需要使用点。 - Shrawan

5

Swift 2.2 版本

  static func drawImage(image foreGroundImage:UIImage, inImage backgroundImage:UIImage, atPoint point:CGPoint) -> UIImage{
    UIGraphicsBeginImageContextWithOptions(backgroundImage.size, false, 0.0)
    backgroundImage.drawInRect(CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height))
    foreGroundImage .drawInRect(CGRectMake(point.x, point.y, foreGroundImage.size.width, foreGroundImage.size.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage
  }

4
这是我所做的。cameraImg是我从相机获取的图像,另外三个图像是我在cameraImg上显示的静态图像。在这种情况下,size定义了我们要开始的上下文的大小。图像是在DrawInRect方法定义的矩形中绘制的。确保结束上下文就完成了。
UIImage *cameraImg = image;

UIImage *leftImg = [UIImage imageNamed:@"apple.jpeg"];

UIImage *rightImg = [UIImage imageNamed:@"Cloud.png"];

UIImage *middleImg = [UIImage imageNamed:@"mario.jpeg"];

CGSize size = CGSizeMake(cameraImg.size.width, cameraImg.size.height);

UIGraphicsBeginImageContext(size);

[cameraImg drawInRect:CGRectMake(0, 0, self.view.window.frame.size.width, self.view.window.frame.size.height)];

[leftImg drawInRect:CGRectMake(x, y, width, height)];

[rightImg drawInRect:CGRectMake(x, y, width, height)];

[middleImg drawInRect:CGRectMake(x, y, width, height)];

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0,finalImage.size.width, finalImage.size.height)];

imageView.image = finalImage;

[self.view addSubview:imageView];

2

Swift 3.x

func drawImage(image foreGroundImage:UIImage, inImage backgroundImage:UIImage, atPoint point:CGPoint) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(backgroundImage.size, false, 0.0)
    backgroundImage.draw(in: CGRect.init(x: 0, y: 0, width: backgroundImage.size.width, height: backgroundImage.size.height))
    foreGroundImage.draw(in: CGRect.init(x: point.x, y: point.y, width: foreGroundImage.size.width, height: foreGroundImage.size.height))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage!
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接