iOS затрагивает начало проблемы

У меня есть NSArray с 15 UIImageViews:

@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

Прикосновения Беган и Прикосновения Переместились:

-(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;
}

Я должен знать, было ли касание в одном из двух возможных UIImageViews, и если это было, переместите его. Интенты Contador1 и Contador2 - это счетчики, которые подсчитывают, сколько видимых UIImageView, пользователь может перемещать только последние 2 из них.

Это работает, дело в том, что когда я касаюсь снаружи, это приводит к сбою приложения. Если я изменяю в touchesBegan и TouchesMoved, индекс "posible = [ArrayImage..", для 0, он работает только для первого UIImageView (я понимаю, почему), но это до сих пор не дает сбоя.

Есть идеи?

1 ответ

Решение

Я должен знать, было ли касание в одном из двух возможных 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

}
Другие вопросы по тегам