0

基本的なタイプの画像ギャラリー (iPhone の写真アプリに非常に似ています) を実装し、押すと戻るボタンがあります。まあ、それは機能しますが、ごくわずかな場合に限られます。画像ギャラリーは基本的に、UIScrollView のレイヤーと UIImageView の上にある UIPageControl です。ページ間 (つまり、画像間) を通過できます。ただし、ボタンは最初のページにのみ表示され、アクセスできます。ジェスチャー (この場合はタップ) を使用してボタンを表示します。このボタンは 1 ページ目から移動しない場合にのみ機能します. 2 ページ目に移動してから最初に戻ると, 画面をタップしてボタンを表示するとアプリがクラッシュします. 少し複雑な説明です.それ。ボタンを表示するために使用するコードは次のとおりです。

//.h

@interface ImatgesNouViewController : UIViewController <UIScrollViewDelegate, UIGestureRecognizerDelegate> {
UIScrollView *bgScorllView;        
UIView *bgView;                           
UIImageView *picImageView;      
UIScrollView *picScrollView;   
UIImageView *preImageView;   
UIImageView *nextImageView;
}

//.m
-(void)viewDidLoad{
[super viewDidLoad];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap:)];
tapGesture.numberOfTapsRequired = 1;
[tapGesture setDelegate:self];
[self.view addGestureRecognizer:tapGesture];
}

次に、画像ギャラリー用にさまざまなものをロードします。

-(void) didTap:(id) sender{


if (boto.hidden == YES){

    [picImageView addSubview:boto];



    boto.hidden = NO;
    NSLog(@"apareix");
} else {

    [picImageView addSubview:boto];


    boto.hidden = YES;
    NSLog(@"desapareix");
}

}

コードを void アクションに更新したところ、問題の詳細がわかりました。古いコードでは、ボタンは画像ギャラリーの最初のページにしか表示されませんでした。画像ギャラリーのすべてのページに表示できるようになりました。いつクラッシュするかがわかるようになりました。画面をタップしてボタンを表示し、もう一度タップして非表示にすると、何度でも機能します。しかし、それを行った後、別のページに移動したい場合は、クラッシュします。この情報により、問題がより早く解決されることを願っています。

crash log: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '(null)' * First throw call stack: (0x19b6012 0x1448e7e 0x19b5e78 0xedef35 0xff93a2 0x3d5c4f 0x3e7748 0x3e7c9d 0x3ee5ec 0x3f20e7 0x65a89a 0x6599db 0x65b11f 0x65dd6d 0x65dcec 0x655a68 0x3c2fc2 0x3c34a3 0x3a13aa 0x392cf8 0x1800df9 0x1800ad0 0x192bbf5 libc++abi.dylib: 例外をスローして呼び出された終了 (lldb)

(クラッシュログの投稿が遅くなってすみません)

正確に何が起こっているのか、このクラッシュの理由はわかりません。画像間のスワイプを認識するジェスチャがこのクラッシュを引き起こしている可能性があります (1 回のタップのジェスチャと組み合わせて)。高度なヘルプをありがとう!

4

2 に答える 2

0

私は自分の質問に対する答えを見つけました。少し考えた後、ボタンの前にいくつかのオブジェクトがあることがわかりました。そのため、ボタンを一番上に配置する必要がありますが、(他のオブジェクトと同様に) ビューにサブビューを追加することで簡単に実行できます。これにより、ボタンは常に上部にとどまりますが、タップ ジェスチャと void コマンドを使用して、非表示を [はい] から [いいえ] に変更します。コードは次のとおりです。

- (void)viewDidLoad
{
[super viewDidLoad];    
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap:)];
tapGesture.numberOfTapsRequired = 1;
[tapGesture setDelegate:self];
[self.view addGestureRecognizer:tapGesture];
[self.view addSubview:boto];
[boto setHidden:YES];     }

-(void) didTap:(id) sender
{
if (boto.hidden == YES){
          [self.view addSubview:boto];
    boto.hidden = NO;
    NSLog(@"apareix");

} else {
    [boto removeFromSuperview];
    boto.hidden = YES;
    NSLog(@"desapareix");
    [self.view addSubview:boto];
}
}

私を助けてくれたすべての人に感謝します。あなたのすべての助けを借りて、私はその一見単純なことに取り組むことができます.

于 2012-10-14T16:12:52.340 に答える
0

これを試して...

action:@selector(didTap) を action:@selector(didTap:) に変更

-(void) didTap{ を -(void) didTap: (id)sender{ に変更

于 2012-10-14T13:45:20.557 に答える