2011-09-05 8 views
19

iOS 앱에서 YouTube의 미리보기 이미지를 표시하고 있습니다. 클릭하면 youtube로 이동합니다.iOS의 다른 이미지 위에 이미지 오버레이

이미지 위에 재생 버튼을 오버레이하는 방법이 필요합니다. 그렇게하는 가장 간단한 방법은 무엇일까요?

또한, 이미지가 원격 테이블에로드되므로 성능이 큰 고려

당신이 테이블 스크롤 성능에 관심을하는 경우
+0

? 너 해봤 니? 나는 당신의 솔루션에 대해 똑같은 일을하고 호기심을 보이고 있습니다. – 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

thanks @jano! 이걸 시험해 볼거야. 나는 실제로 이미지 위에 그림이 효과적 일 것이라고 다소 놀랐다. –

+2

@Jano 이것은 작동하지만 PNG의 투명도는 손실된다. –

+0

컨텍스트 생성시 사용 된 0.0에주의를 기울여야한다. 0.0을 사용하면 크기가 기본 화면의 크기에 따라 달라집니다. 누군가 다른 이미지 위에 하나의 이미지를 배치하려는 경우 –

3

다음은 내가 한 것입니다. cameraImg는 내가 카메라에서 가져 오는 이미지이고 다른 세 개의 이미지는 cameraImg에 표시 한 정적 이미지입니다. 이 경우 size는 우리가 시작할 컨텍스트의 크기를 정의합니다. 이미지는 DrawInRect 메서드로 정의 된 rect에 그려집니다. 컨텍스트를 끝내면 작업이 완료된 것입니다.

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! 
}