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