0

私はNSArraywhit15UIImageViewsを持っています:

@interface ViewController : UIViewController{

    NSArray *ArrayImages1;
    NSArray *ArrayImages2;

}

viewDidLoadで:

 ArrayImages1 = [[NSArray alloc] initWithObjects: a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, nil];

ここで、a1、a2 ...はUIImageViewsのアウトレットであり、ArrayImages2についても同じです。

TouchesBeganとTouchesMoved:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    UIImageView *posible;
    int imagen;
    if (point.x < 161) {
        imagen = Contador1;
        if (Contador1 > 14) {imagen = Contador1 - 15;}
        imagen--;
        posible = [ArrayImages1 objectAtIndex:imagen];
    }
    else if (point.x > 159) {
        imagen = Contador2;
        if (Contador2 > 14) {imagen = Contador2 - 15;}
        imagen--;
        posible = [ArrayImages2 objectAtIndex:imagen];
    }
    if ([touch view] != posible) { return; }
    original2 = posible.center;    
}


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.view];
    UIImageView *posible;
    int imagen;
    if (point.x < 161) {
        imagen = Contador1;
        if (Contador1 > 14) {imagen = Contador1 - 15;}
        imagen--;
        posible = [ArrayImages1 objectAtIndex:imagen];
    }
    else if (point.x > 159) {
        imagen = Contador2;
        if (Contador2 > 14) {imagen = Contador2 - 15;}
        imagen--;
        posible = [ArrayImages2 objectAtIndex:imagen];
    }
    if ([touch view] != posible) { return; }
    posible.center = point;
}

タッチが2つの可能なUIImageViewのいずれかにあるかどうかを知る必要があり、ある場合は移動します。Contador1およびContador2intは、表示されているUIImageViewの数をカウントするカウンターであり、ユーザーはそれらの最後の2つのみを移動できます。

それは機能します、それは私が外に触れるとき、それはアプリをクラッシュさせます。touchesBeganとTouchesMovedを変更すると、「posible = [ArrayImage ..」のインデックスが0になり、最初のUIImageViewでのみ機能します(理由はわかります)が、クラッシュしません。

何か案は?

4

1 に答える 1

0

タッチが2つの可能なUIImageViewsのいずれかにあったかどうかを知る必要があります

私はあなたのコードをうまく理解できませんが、ポイントがビューの四角形内にあるかどうかを最初に確認すると、物事を単純化できるようです。次に、結果に基づいてロジックを作成します。何かのようなもの

CGRectContainsPoint の使用:

bool CGRectContainsPoint (
   CGRect rect,
   CGPoint point
);



UIImageView *foundView

for(UIImageView* theView in ArrayImages1){

 if (CGRectContainsPoint(theView.frame, touchPoint){
     foundView = theView;
     break;
 }

}

それで...

if (foundView != nil){
// do some logical thing

}

または...

if ([foundView isEqual:someOtherView]){
// I may have the syntax wrong on the above

}
于 2012-07-27T21:35:13.587 に答える