1

私はスクリーンショットを撮り、次のコードでファイルに書き込んでいます:

 if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(self.view.bounds.size);

[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData * data = UIImagePNGRepresentation(image);

NSArray *directories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [directories objectAtIndex:0];
NSString *key = [documentsDirectory stringByAppendingPathComponent:@"screenshots.archive"];

NSMutableArray *storageArray = [NSMutableArray arrayWithContentsOfFile:key];

if(!storageArray)
    storageArray = [NSMutableArray arrayWithObject:data];
else
    [storageArray addObject:data];

[storageArray writeToFile:key atomically:YES];

画像を再度読み込むときは、次のようにします。

pics = [[NSArray alloc] initWithContentsOfFile:[self dataFilePath]];

ScreenshotViewController *scv = [[ScreenshotViewController alloc]init];

[[self navigationController]pushViewController:scv animated:YES];
NSInteger row = indexPath.row;
[scv setImage:[pics objectAtIndex:row]];

dataFilePath メソッド:

- (NSString *)dataFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"screenshots.archive"];
}

問題は、ScreenshotViewController の UIImageView が空白のままであることです。私はあらゆる種類のものをテストしましたが、それは画像が配列に保存/ロードされる方法に関するものですが、よくわかりません。また、実際のスクリーンショット パーツをすぐに UIImageView に入れてビューに追加することで、実際のスクリーンショット パーツが機能していることもテストしました。

注:これを変更すると

[scv setImage:[pics objectAtIndex:row]];

これに

[scv.myUIImageView setImage:[pics objectAtIndex:row]];

この例外が発生します: [__NSCFData _isResizable]: 認識されないセレクターがインスタンス 0x847a280 に送信されました。

画像を設定する正しい方法は何ですか?

うわー、少し乱雑になりました。読みやすいことを願っています。

4

1 に答える 1

1

一見すると、読み取り/書き込みコードが正しいと仮定すると、画像は PNG 表現で保存されます。したがって、読むときは、次のように UIImage を作成する必要があります。

UIImage * myPic = [UIImage imageWithData:[pics objectAtIndex:row]];

次に、その画像を表示してみてください

于 2013-10-02T21:41:42.723 に答える