Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 否则如果语句不';他似乎没有被处决_Ios_Objective C_If Statement - Fatal编程技术网

Ios 否则如果语句不';他似乎没有被处决

Ios 否则如果语句不';他似乎没有被处决,ios,objective-c,if-statement,Ios,Objective C,If Statement,我有一个if语句,它检查一个可拖动的imageView是否与另一个imageView相交,它记录拖动到其中的项目数量并更改图像。我还有一个else if语句,查看2个imageView是否与计数器imageView相交。第一个if语句工作正常,但当我将另一个语句拖到它上面时,什么也没有发生。图像不会改变。我试着用下面的方法做,但似乎不起作用 有人知道为什么吗?有没有更好的方法 我的代码: - (void)touchesEnded:(NSSet *)touches withEvent:(UIEve

我有一个
if
语句,它检查一个可拖动的
imageView
是否与另一个
imageView
相交,它记录拖动到其中的项目数量并更改图像。我还有一个
else if
语句,查看2个
imageView
是否与计数器
imageView
相交。第一个
if
语句工作正常,但当我将另一个语句拖到它上面时,什么也没有发生。图像不会改变。我试着用下面的方法做,但似乎不起作用

有人知道为什么吗?有没有更好的方法

我的代码:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{

    for (UIImageView *letter in letterA)
    {
        if (CGRectIntersectsRect(letter.frame ,answerA.frame))
        {
            UIImage *Pic1 = [UIImage imageNamed:@"number1"];
            [correctCounterA setImage:Pic1];
            letter.userInteractionEnabled=NO;
            letter.hidden=YES;

        }
        else if(CGRectIntersectsRect(letter.frame ,answerA.frame) && CGRectIntersectsRect(letter.frame, answerA.frame))
        {
            UIImage *Pic2 = [UIImage imageNamed:@"number2"];
            [correctCounterA setImage:Pic2];
            letter.userInteractionEnabled=NO;
            letter.hidden=YES;
        }
    }

}

你的第二个条件只包含第一个条件的一个子集,所以它要么在第一个条件中已经是真的,要么永远不会是真的

你现在的问题是: 若字母和答案相交,做点什么。 若字母和答案不相交,那个么若字母和答案相交,字母和答案相交,那个么做些别的事情


我这里缺少了一些替代方案…

如果目标是实现可拖动视图并检测交叉口,那么我将这样处理问题:

@interface ViewController()
@property (weak, nonatomic) IBOutlet UIImageView *imageViewOne;
@property (weak, nonatomic) IBOutlet UIImageView *imageViewTwo;
@property (weak, nonatomic) IBOutlet UIImageView *imageViewThree;
@property (weak, nonatomic) IBOutlet UIImageView *imageViewFour;    
@property (nonatomic) BOOL hasView;
@property (strong, nonatomic) NSArray *imageViewCollection;
@property (strong, nonatomic) UIImageView *viewToDrag;
@property (weak, nonatomic) IBOutlet UIImageView *destinationView;
@property (nonatomic) NSUInteger destinationViewCounter;
@property (nonatomic) CGPoint originalLocation;
@end


- (void)viewDidLoad {
    [super viewDidLoad];
    self.imageViewCollection = @[_imageViewOne, _imageViewTwo, _imageViewThree, _imageViewFour];
    self.view.multipleTouchEnabled = NO;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    for(UIImageView *view in _imageViewCollection) {
        if(CGRectContainsPoint(view.frame, touchLocation)) {
            self.originalLocation = view.center;
            self.viewToDrag = view;
            self.hasView = YES;
        }
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if(self.hasView) {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint touchLocation = [touch locationInView:self.view];
        self.viewToDrag.center = touchLocation;
        [self.view bringSubviewToFront: self.viewToDrag];
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    if(CGRectIntersectsRect(self.destinationView.frame, self.viewToDrag.frame)) {
        NSUInteger tagNumber = self.viewToDrag.tag;
        [self removeImageForTagNumber:tagNumber];   //to remove imageViews after dragged
        self.viewToDrag.center = self.originalLocation;
        self.destinationViewCounter++;
        self.viewToDrag = nil;
        if(self.destinationViewCounter > 4) {
            self.destinationViewCounter = 0; //if we're out of range reset the counter
        }
        self.destinationView.image = [self imageForNumber:self.destinationViewCounter];   //convenience method to grab the correct image (correlating to the counter)
    }  
    self.viewToDrag.center = self.originalLocation; //snap the imageView back into place
    self.hasView = NO;
}

- (void)removeImageForTagNumber:(NSUInteger)number {
    switch (number) {
        case 1:
            [_imageViewOne removeFromSuperview];
            break;
        case 2:
            [_imageViewTwo removeFromSuperview];
            break;
        case 3:
            [_imageViewThree removeFromSuperview];
            break;
        case 4:
            [_imageViewFour removeFromSuperview];
        default:
            return;
    }
}

我还为您创建了一个示例项目

这似乎就是您所追求的:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    int intersectionCount = 0;
    for (UIImageView *letter in letterA) {
        if (CGRectIntersectsRect(letter.frame ,answerA.frame)) {
            letter.userInteractionEnabled = NO;
            letter.hidden = YES;
            intersectionCount++;
        }
    }

    if (intersectionCount == 1) {
        UIImage *Pic1 = [UIImage imageNamed:@"number1"];
        [correctCounterA setImage:Pic1];
    }

    else if (intersectionCount == 2) {
        UIImage *Pic2 = [UIImage imageNamed:@"number2"];
        [correctCounterA setImage:Pic2];
    }
}
或者更一般地说:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    int intersectionCount = 0;
    for (UIImageView *letter in letterA) {
        if (CGRectIntersectsRect(letter.frame ,answerA.frame)) {
            letter.userInteractionEnabled = NO;
            letter.hidden = YES;
            intersectionCount++;
        }
    }

    if (intersectionCount == 0) {
        [correctCounterA setImage:nil];
    }

    else {
        NSString *imageName = [NSString
            stringWithFormat:@"number%d", intersectionCount];
        UIImage *image = [UIImage imageNamed:imageName];
        [correctCounterA setImage:image];
    }
}

X&&Y甚至比X更具限制性。在任何情况下,
!X&&X&&Y
。重新思考布尔逻辑可能是这里的关键。特别是因为它实际上是
X&&X
…那么我该怎么做呢?字母来自
UIImageViews
数组。我每次都试图访问一个随机的,但是没有幸运的if else brach如下:
if(a){…}else if(a&&a){…}
。那是什么?合理的逻辑在哪里?你想在这里实现什么?我有4个A。它们在一个数组中,希望每次我调用它时,它都会使用我单击的其中任何一个。我尝试了
+,&&&
和其他一些操作符,但似乎都不起作用,有没有不同的方法?当然,这取决于你想要实现什么。目前你的else是if语句的一个特例-你可以把它放在第一个if中,如果这是你想要的…请试着解释你想要实现什么,这样我就可以给你指出正确的方向。我有4个数组中的ImageView。我希望能够将它们拖到另一个imageView上,该视图计算拖了多少。比如说,如果我拖动1,它会将图像更改为数字1,如果我拖动更多,它会相应地更改为数字。这有用吗?此外,它们以何种顺序拖动也不重要。这有点可行,但由于某种原因,当我试图从
imageview
中添加任何内容时,它不起作用。它需要特定的,而不是随机的。是因为我使用了
IBOutletCollection
?有没有一种方法可以使它随机,这样我拖动它们的顺序就不重要了?它实际上遵循一种模式。第一个拖动的将变为数字1,第二个将不起作用,第三个将变为数字2,第四个将变回数字1,你知道为什么会这样吗?这很好,但是你知道如何使
图像视图在正确拖动后消失吗?是的。有多种方法可以做到这一点,但这是我想到的最简单的方法:1)在情节提要或编程方式中为图像视图设置标记号2)现在
viewToDrag
将能够准确地告诉我们,如果到达
destinationView
3)实现一个简单的获取一个数字并删除相应的
imageView
如何设置标记号的便捷方法?在故事板中:选择imageView>Attributes>tag或以编程方式设置它,
\u imageView.tag=1