0

私の要件は、ボタン1をクリックすると、対応する画像がスワイプジェスチャによって次のビューに表示される必要があるため、送信者の値を子ビューコントローラーに送信することです

viewcontroller.m

-(IBAction)cricket:(id)sender

{

  //cricket is a button
   NSString *str=[cricket currentTitle];
  ChildViewController *child=[[ChildViewController alloc]init];
   [child handleSwipe:str];

}

そしてここにある

childviewcontroller.m

int imageIndex=4;
 - (IBAction)handleSwipe:(UISwipeGestureRecognizer *)sender 
 {
    if([sender isEqual:@"cricket"]))
{

    NSArray *images=[[NSArray alloc]initWithObjects:[UIImage imageNamed:@"exterior1.png"],      [UIImage imageNamed:@"cricket.png"],[UIImage imageNamed:@"floor_plan1.png"],Nil];
    UISwipeGestureRecognizerDirection direction=[(UISwipeGestureRecognizer *)sender direction];

    switch (direction) {
        case UISwipeGestureRecognizerDirectionLeft:
            imageIndex++;
            break;
        case UISwipeGestureRecognizerDirectionRight:
            imageIndex--;
        default:
            break;
    }
    imageIndex=(imageIndex<0) ? ([images count]-1):
    imageIndex % [images count];
    [images objectAtIndex:imageIndex];

}

私はこのことにひどく打ちのめされました、助けてください

4

2 に答える 2

0

あなたが何をしようとしているのかよくわかりませんが、あなたのコードには多くの問題があります。ここから始めましょう:

NSString *str= [arr objectAtIndex:0];

配列から最初のオブジェクトを取得してに配置していますNSStringが、実際にはUIImage.

次にchildviewcontroller.m、送信者が他のものと等しいことを確認していますUIImageが、ここの等号はポインターをチェックし[UIImage imageNamed:]、キャッシュされた画像を返すことが多いため、これは機能する可能性があります。しかし、そうではないかもしれません。

あなたがにキャストsenderするUISwipeGestureRecognizer

UISwipeGestureRecognizerDirection direction=[(UISwipeGestureRecognizer *)sender direction];

ただし、送信者が であるかどうかを確認している場合はUIImage、それを にキャストしますUISwipeGestureRecognizer。そうではありません。コードがクラッシュするためです。

次に、これを行います。

img.image=[UIImage imageNamed:[images objectAtIndex:imageIndex]];

によって返されるオブジェクト[images objectAtIndex:imageIndex]はすでに でUIImageあり、この場合[UIImage imageNamed:[images objectAtIndex:imageIndex]]は常に返されます。nilあなたはただ使うことができます:

img.image= [images objectAtIndex:imageIndex];

UIImageこれらはより多くのメモリを消費するため、オブジェクトではなく文字列のみを使用するようにコードを書き直すことをお勧めします。次に、最後のステップでimageNamed:メソッドを使用して画像をロードします。

于 2013-08-29T10:10:29.560 に答える
0

これはメソッドのみdirectionのメソッドではないため、アプリケーションがクラッシュします。gettersetter

ここ(UISwipeGestureRecognizer *)senderで、コードを確認したら、画像ビューオブジェクトを提供します。

Edit:-

direction プロパティを使用して UISwipeGestureRecognizer に方向を設定できます。この _swiper.direction == UISwipeGestureRecognizerDirectionLeft のようにしようとすると、毎回 false になります。なぜなら、ここでは方向を取得しようとしているが、うまくいかないからです。

スワイプの方向を認識するために、さまざまな方向にさまざまなジェスチャを追加できます。方向プロパティは、特定のスワイプの実際の方向ではなく、スワイプとして認識される許可された方向のみを定義します。

UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFromLeft)];
[leftRecognizer setDirection: UISwipeGestureRecognizerDirectionLeft];
[[self view] addGestureRecognizer:leftRecognizer];
[leftRecognizer release];

UISwipeGestureRecognizer *rightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFromRight)];
[rightRecognizer setDirection: UISwipeGestureRecognizerDirectionRight];
[[self view] addGestureRecognizer:rightRecognizer];
[rightRecognizer release];
EDIT:

-(void)handleSwipeFromRight{
NSLog(@"swipe from right");
}
and

-(void)handleSwipeFromLeft{
NSLog(@"swipe from Left");
}
于 2013-08-29T09:54:08.513 に答える