0

ユーザーがUIViewControllerボタンをクリックすると、別のボタンに移動しUIViewControllerて画像操作を行う場所があります。画像が操作されたら、NSNotification.

際立っている私の問題は、ユーザーが画像のトリミングを終了したときにNSNotification最初に を受信して​​いないことです...すべての根拠をカバーし、通知処理方法を,に入れました...UIViewController- (void) finishCroppingviewDidLoadviewWillAppearviewWillAppear

通知が届かない理由がわかりません。これは非常に簡単なはずです

[[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];

}
4

1 に答える 1