ユーザーがUIViewController
ボタンをクリックすると、別のボタンに移動しUIViewController
て画像操作を行う場所があります。画像が操作されたら、NSNotification
.
際立っている私の問題は、ユーザーが画像のトリミングを終了したときにNSNotification
最初に を受信していないことです...すべての根拠をカバーし、通知処理方法を,に入れました...UIViewController
- (void) finishCropping
viewDidLoad
viewWillAppear
viewWillAppear
通知が届かない理由がわかりません。これは非常に簡単なはずです
[[NSNotificationCenter defaultCenter] removeObserver:self];
からコメントアウトするviewDidDisappear
と機能します....しかし理論的に言えば...通知ハンドラーを再設定している場合、3つの利用可能なメソッドのいずれかで再度呼び出す必要がありますか?
最初の UIViewController & NSNotification レシーバー
- (void) addNewPictureFromLibrary {
[self.view endEditing:YES];
imageCroppingViewController* popupController = [self.storyboard instantiateViewControllerWithIdentifier:@"imageCroppingView2"];
[self.navigationController pushViewController:popupController animated:YES];
}
- (void) viewDidDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void) viewDidLoad {
[self notifications];
}
- (void) viewWillAppear:(BOOL)animated {
[self notifications];
}
- (void) viewDidAppear:(BOOL)animated {
[self notifications];
}
- (void) notifications {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(imageCroppingView:)
name:@"imageCroppingView"
object:nil];
}
- (void) imageCroppingView:(NSNotification *) notification {
NSLog(@"imageCroppingView IN HERE");
}
送信者 UIViewController
- (void) finishCropping {
float zoomScale = 1.0 / [scrollView zoomScale];
CGRect visibleRect;
visibleRect.origin.x = scrollView.contentOffset.x * zoomScale;
visibleRect.origin.y = scrollView.contentOffset.y * zoomScale;
visibleRect.size.width = scrollView.bounds.size.width * zoomScale;
visibleRect.size.height = scrollView.bounds.size.height * zoomScale;
UIImage *cropped = imageFromView(imageView.image, &visibleRect);
NSDictionary *dictionary = @{@"image":cropped};
self.navigationController.navigationBar.hidden = NO;
[self.navigationController popToRootViewControllerAnimated:TRUE];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"imageCroppingView"
object:nil
userInfo:dictionary];
}