2014-01-21 19 views
0

我想混合一個圖像,但有一個問題,即在混合後像素幾乎失去一半。我的代碼是:UIImage混合模式在Retina顯示屏上不能正常工作

UIImageView *baseIgv2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 76, 76)]; 
[self.view addSubview:baseIgv2]; 
[baseIgv2 setImage:[UIImage imageNamed:@"btn_award_open.png"]]; 
baseIgv2.center = CGPointMake(300, 300); 

UIGraphicsBeginImageContext(baseIgv2.bounds.size); 

[baseIgv2.image drawInRect:baseIgv2.bounds]; 
[baseIgv2.image drawInRect:baseIgv2.bounds blendMode:kCGBlendModeScreen alpha:.8]; 
[baseIgv2.image drawInRect:baseIgv2.bounds blendMode:kCGBlendModeDestinationIn alpha:.8]; 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

[baseIgv2 setImage:newImage]; 

CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
anim.beginTime = CACurrentMediaTime(); 
anim.fromValue = @.5; 
anim.toValue= @1; 
anim.autoreverses = YES; 

anim.duration = .5; 
anim.repeatDuration = 1000; 
anim.repeatCount = 1000; 
[baseIgv2.layer addAnimation:anim forKey:nil]; 

項目的圖片中包含[email protected][email protected]~ipad.pngbtn_award_open〜ipad.png

之前我使用融爲一體,它就好,但在使用它之後,它不再是視網膜。任何人都可以幫忙

+1

您正在創建非視網膜圖像上下文。 – Desdenova

+0

@Desdenova你應該發佈這個答案並解釋用什麼API來創建視網膜環境 –

回答

1

儘管您所做的是正確的,但您正在使用舊的UIKit函數來創建位圖上下文。

以規模求視網膜屏幕的位圖背景下,你應該使用這個功能來代替:

void UIGraphicsBeginImageContextWithOptions(
    CGSize size, 
    BOOL opaque, 
    CGFloat scale 
); 

所以,你需要替換這行代碼:

UIGraphicsBeginImageContext(baseIgv2.bounds.size); 

有了這個:

UIGraphicsBeginImageContextWithOptions(baseIgv2.bounds.size, YES, 0.0); 

有關功能及其參數的更多信息:

https://developer.apple.com/library/ios/documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html

+0

非常感謝!這個對我有用! – Vienta

+0

不客氣。 – Desdenova