将按钮移动到图像目标

时间:2016-08-16 09:20:17

标签: ios objective-c uibutton

我是目标c中的新手,现在我尝试构建像What's the word这样的游戏,我在目标坐标和按钮传递到目标时遇到了一些问题。我在这里创建一个-(void)dealRandomWord我从plist中取出一个单词并在屏幕上输出我的所有子视图。我是从viewDidLoad: [self dealRandomWord]打来的。

这是我的问题:

#pragma mark Targets

_targets = [NSMutableArray arrayWithCapacity:word1len];

         for (NSInteger i = 0; i < word1len; i++) {
             NSString *letter = [word1 substringWithRange:NSMakeRange(i,    1)];
             TargetView *target = [[TargetView alloc]   initWithLetter:letter andSideLength: letterSide];
             target.center = CGPointMake(xCenterTarget + i * (letterSide + kLetterMargin), placesView.frame.size.height / 2);
             [placesView addSubview:target];
             NSLog(@"biiitch %@", NSStringFromCGPoint(target.center));
             }

在target.center中我有目标坐标,我想通过点击移动我的按钮。当我点击其中一个按钮而不是在目标中时,它会发生,因为在

-(void)placeForButton:(InputButtonsView*)inputButtonsView atTarget:(TargetView*)targetView {

targetView.center coordinate equal {0,0}

如何将每个目标的坐标传递给我的按钮,使其移动到目标位置。每个下一个按钮都应该移动到下一个目标。

这是图片:Screenshot

感谢您的帮助!!!

这是我的代码:

 -(void)dealRandomWord {
#pragma mark Level and words init
    NSAssert(self.level.words, @"Level not loaded");

    // random word from plist
    NSInteger randomIndex = arc4random()%[self.level.words count];
    NSArray* anaPair = self.level.words[ randomIndex ];

    NSString* question = anaPair[0]; // question
    NSString* word1 = anaPair[1]; // answer
    NSString* word2 = anaPair[2]; // some letters
    NSString* helpstr = anaPair[3]; // helper

    NSLog(@"qweqweq %@ %@ %@" , word1 , word2 , helpstr);

    NSInteger word1len = [word1 length];
    NSInteger word2len = [word2 length];

    NSLog(@"phrase1[%li]: %@", (long)word1len, word1);
    NSLog(@"phrase2[%li]: %@", (long)word2len, word2);
    NSLog(@"question %@", question);

    float letterSide = ceilf (kScreenWidth * 0.9 / (float)MAX(word1len, word2len) - kLetterMargin);

    float xOffset = (kScreenWidth - (float)MAX(word1len, word2len) * (letterSide + kLetterMargin))/3;


    xOffset += letterSide/2;
    float yOffset = 1.5* letterSide;


#pragma mark QuestionView init
    QuestionView *quv = [[QuestionView alloc] init];
    quv.questionLabel.text = question;
    [self.view addSubview:quv];
    quv.center = CGPointMake(185, 210);

#pragma mark PlacesView init

    PlacesView *placesView = [[PlacesView alloc] init];
    [self.view addSubview:placesView];
    placesView.center = CGPointMake(185, 400);

    //Center x position for targets
    float xCenterTarget = ((placesView.frame.size.width / 2) - ((word1len / 2) * letterSide ));

#pragma mark LetterView init

    LettersView *lettersView = [[LettersView alloc] init];
    [self.view addSubview:lettersView];
    lettersView.center = CGPointMake(185, 500);


#pragma mark Targets
    _targets = [NSMutableArray arrayWithCapacity:word1len];

    for (NSInteger i = 0; i < word1len; i++) {
        NSString *letter = [word1 substringWithRange:NSMakeRange(i, 1)];
        TargetView *target = [[TargetView alloc] initWithLetter:letter andSideLength: letterSide];
        target.center = CGPointMake(xCenterTarget + i * (letterSide + kLetterMargin), placesView.frame.size.height / 2);
        [placesView addSubview:target];
        NSLog(@"coord target init %@", NSStringFromCGPoint(target.center));
        }

#pragma mark LettersView init

    //init letters list
    _letters = [NSMutableArray arrayWithCapacity: word2len];

    //create letter
    for (NSInteger i=0;i<word2len;i++) {
        NSString* letter = [word2 substringWithRange:NSMakeRange(i, 1)];


        if (![letter isEqualToString:@" "]) {
            InputButtonsView *buttons = [[InputButtonsView alloc] initWithLetter:letter andSideLength:letterSide];
            buttons.center = CGPointMake(xOffset + i * (letterSide + kLetterMargin), lettersView.frame.size.height /2); // "/3*4" kScreenHeight/4*3
            if (i > 6) {
                buttons.center = CGPointMake(- 7 * xOffset + i * (letterSide + kLetterMargin), lettersView.frame.size.height/2 + (letterSide + kLetterMargin)); // "/3*4"


            }
            buttons.clickDelegate = self;
            [lettersView addSubview:buttons];
            //[buttons addSubview:buttons];

            [_letters addObject: letter];
        }
    }
}


-(void)inputButtonView:(InputButtonsView *)inputButtonView didPress:(CGPoint)didPress {
    TargetView *targetView = nil;
    NSLog(@"did press x = %f, y = %f", didPress.x , didPress.y);
    for(TargetView *tv in _targets) {
        if(CGRectContainsPoint(tv.frame, didPress)){
        targetView = tv;
                   break;
        }
    }


     [self placeForButton:inputButtonView atTarget:targetView];
    if (targetView != nil) {
        NSLog(@"Kek");

        if ([targetView.letter isEqualToString: inputButtonView.letter]) {
        [self placeForButton:inputButtonView atTarget:targetView];

        }

    }
}

-(void)placeForButton:(InputButtonsView*)inputButtonsView atTarget:(TargetView*)targetView {
    targetView.isMatched = YES;
    inputButtonsView.isMatched = YES;

    inputButtonsView.userInteractionEnabled = NO;

    CGPoint originButtons = [self.view.superview convertPoint:CGPointZero fromView:inputButtonsView];
    CGPoint originTargets = [self.view.superview convertPoint:CGPointZero fromView:targetView];

    inputButtonsView.center = originButtons;
    targetView.center = originTargets;

    NSLog(@"OriginButtons = %@ , OriginTargets = %@", NSStringFromCGPoint(originButtons) , NSStringFromCGPoint(originTargets));
    inputButtonsView.center = targetView.center;

    NSLog(@"TARGETVIEW.center %@", NSStringFromCGPoint(targetView.center));

}

0 个答案:

没有答案