スクリーンショットを撮る簡単なプログラムを作成します
目的は、フルスクリーンではないモーダルを表示するトリックです。presentingViewController のスクリーンショットを撮り、それをバックグラウンドで表示します。
#import <QuartzCore/CALayer.h>
@implementation UIView (screenshot)
- (UIImage*) screenshot
{
UIGraphicsBeginImageContext(self.bounds.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *myImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return myImage;
}
@end
十分に単純です。
[BGMDCachedProperties singleton].screenShotOfLastPresentingController = self.navigationController.view.screenshot;//スクリーンショットを撮り、変数に入れます
次に、[[BGMDCachedProperties singleton].screenShotOfLastPresentingController saveScreenshot]; を実行します。
-(void)saveScreenshot{
NSData * data = UIImagePNGRepresentation(self);
NSString * documentDirectory= [BGMDApplicationsPointers applicationDocumentsDirectory];
NSString * fileForDocumentDirectory = [documentDirectory stringByAppendingFormat:@"/%@",@"foo.png"];
BOOL result = [data writeToFile:fileForDocumentDirectory atomically:YES];
if (result)
{
}
}
これは私が得たものです:
次に、その画像を表示することを目的としたモック viewController を表示します。たぶん、その foo.png を誤解しているだけでしょうか?わかるように背景を赤にしました
これは私が得たものです:
これを行う必要があるため、明らかにそれは私の目的では機能しません。
最後に、スクリーンショットの上位 20 点を削除するだけで修正できました。
theScreenshot = theScreenshot.crop20PointsifStatusBarShowsUp;
-(UIImage*) crop20PointsifStatusBarShowsUp
{
if ([BGMDApplicationsPointers statusBarShowUp])
{
CGRect newSize = CGRectMake(0, sizeOfStatusBar, self.size.width, self.size.height-sizeOfStatusBar);
UIImage * newImage = [self cropUIImageWithCGRect:newSize];
return newImage;
}
else{
return [self copy];
}
}
やっとうまくいきました: ただし、ユーザーがパーソナル ホットスポットを許可すると、代わりにステータス バーが 40 ポイントになります。
すべてのビューと同様に、ナビゲーションコントローラーは画面全体ではなく「利用可能な」画面のみを埋めることになっているのに、なぜ透明なストリップが navigationController.view に表示されるのだろうか。
また、ストリップのサイズを知るにはどうすればよいですか? ステータスバーがないときは0のときもあれば、20のときもあれば、40のときもあります。
これらの2つのコードを追加しました:
PO(NSStringFromCGRect(self.frame));
PO(NSStringFromCGSize(myImage.size));
そして得た:
2012-10-12 07:57:34.627 BadgerNew[3354:907] <0x1cdc8a60 UIView+screenshot.m:(21)> NSStringFromCGRect(self.frame): {{0, 0}, {320, 431}}
2012-10-12 07:57:34.629 BadgerNew[3354:907] <0x1cdc8a60 UIView+screenshot.m:(22)> NSStringFromCGSize(myImage.size): {320, 431}