2011-09-05 114 views
19

我在iOS应用中显示来自YouTube的缩略图图像。点击后,它将转到youtube。将图像覆盖在iOS中的另一幅图像上

我需要一种将播放按钮叠加到这些图像上的方法。什么可能是最直接的方式呢?

此外,图像远程加载到一个表,所以性能是一个很大的考虑

+0

如果我们把我们的覆盖图像的缩略图imageview的顶部?你试过了吗?我正在尝试同样的事情并对您的解决方案感到好奇。 – user739711

回答

61

如果您关心表的滚动浏览效果,检索缩略图,并在其上绘制的播放按钮。

+(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; 
} 
+0

谢谢@jano!会试试这个。我实际上很惊讶的是,在图像上绘画将是有效的 –

+2

@Jano这可以工作,但png中的透明度会丢失。 –

+0

注意创建上下文时使用的0.0。使用0.0会使尺寸取决于主屏幕的比例。 –

3

这是我做的。 cameraImg是我从相机获得的图像,其他三个图像是我在cameraImg上显示的静态图像。在这种情况下,大小定义了我们要开始的上下文的大小。图像绘制在由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]; 
5

雨燕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 
    } 
2

斯威夫特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! 
}