私は現在、オンラインチュートリアルで見つけたコードを使用して、iPhoneユーザーにカメラロールから画像を選択させています。画像の設定はUIImageView
問題なく機能しますが、画像に対して関数を呼び出そうとします(スライダーを動かすたびに)。オペレーティングシステムがイメージを保持していないことが判明したため、イメージ(または作成したキャッシュ変数)にアクセスしようとすると、機能しません(アドレスがに設定されるため0x0000000
)。
UIImage
に準拠している場合NSCopying
、これは簡単です。しかし、そうではありません。では、オペレーティングシステムがイメージを削除しないように、イメージをコピーするにはどうすればよいですか?
重複の可能性
編集:スライダーを変更すると、次の関数が呼び出されます。
- (IBAction)samplingSliderChanged:(id)sender {
NSLog(@"%@", self.imageStay);
float sample = self.samplingSlider.value * 0.6 + 0.2;
self.samplingRateText.text = [NSString stringWithFormat:@"%.0f%%", sample*100];
//self.imageView.image = [self.brain sampleImage:self.imageStay atRate:sample];
self.imageView.image = [self.brain sampleImage:self.imageStay.copy atRate:sample];
NSLog(@"self.imageStay: %@, self.imageStay.copy: %@", self.imageStay, self.imageStay.copy);
}
スライダーを初めて移動したとき、my self.imageStay
(キャッシュ変数)のアドレスは0x0000
。です。
私のshow-the-camera-roll関数は以下のとおりです。
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = info[UIImagePickerControllerMediaType];
UIImage * image;
[self dismissViewControllerAnimated:YES completion:nil];
image = info[UIImagePickerControllerOriginalImage];
image = [self imageWithImage:image scaledToSize:CGSizeMake(256, 256)];
self.imageView.image = image;
if (_newMedia)
UIImageWriteToSavedPhotosAlbum(image,
self,
@selector(image:finishedSavingWithError:contextInfo:),
nil);
self.imageView.image = image;
self.imageStay = image
}
ここでは、キャッシュ変数はと同じメモリアドレスを持っており、image
これは後で削除されると思います。