3

UILongPressGestureRecognizer がアクション handleLongPressOnPhotos で imageView に追加されます。最も関連するコードは次のとおりです。

- (IBAction)handleLongPressOnPhotos:(UIImageView *)sender{
self.imageWillBeSaved = sender;
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Save the photo" otherButtonTitles: @"Go to the Original photo", nil];
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet showInView:self.view]; 
[actionSheet release];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
switch (buttonIndex) {
    case 0:
        UIImageWriteToSavedPhotosAlbum(self.imageWillBeSaved.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil);

        break;

    default:
        break;
}

}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
if (error != NULL)
{
    // handle error
}
else 
{
    // handle ok status
}
}

アクション シートの [写真を保存] ボタンをクリックすると、次のようなエラー メッセージが表示されます 。前もって感謝します!

4

3 に答える 3

5

上の2行を入れ替えるだけ。

- (IBAction)handleLongPressOnPhotos:(UIImageView *)sender{
self.imageWillBeSaved = sender;

と..

- (IBAction)handleLongPressOnPhotos:(UIGestureRecognizer *)sender{
self.imageWillBeSaved = sender.view;

これはうまくいくはずです...なぜこれが起こっているのかは、Davidによって非常によく説明されています.

于 2012-05-09T06:05:43.570 に答える
2

あなたの送信者は明らかに UILongPressGestureRecognizer です。

ジェスチャ レコグナイザーがトリガーされたときに起動するメソッドは、次のようになります。

- (void)nameOfMethodHere:(UIGestureRecognizer *)gestureRecognizer;

引数は、イメージ ビューではなく、レコグナイザーです。レコグナイザーが 1 つのビューにのみアタッチされている場合は、viewプロパティを介して取得します。それ以外の場合は、長いタップの場所を取得し、テストをヒットしてビューを取得できます。

于 2012-05-09T05:57:50.347 に答える
2

これがためのものですUILongPressGestureRecognizer

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongPress:)];
longPress.minimumPressDuration = 1.0;
[YOURVIEW addGestureRecognizer:longPress];
[longPress release];    

これは のセレクターです。コードの問題は、これを編集するだけのセレクターで引数としてUILongPressGestureRecognizer渡していることです..UIImageViewUILongPressGestureRecognizer

- (void)handleLongPress:(UILongPressGestureRecognizer*)sender 
{ 
    if (sender.state == UIGestureRecognizerStateBegan) 
    {
         //YOUR CODE
    }
}
于 2012-05-09T06:03:05.347 に答える