Ios 将按钮移动到图像目标
我是目标c的新手,现在我试着建立一个类似游戏的游戏,我在目标坐标和按钮传递方面遇到了一些问题。我创建了一个Ios 将按钮移动到图像目标,ios,objective-c,uibutton,Ios,Objective C,Uibutton,我是目标c的新手,现在我试着建立一个类似游戏的游戏,我在目标坐标和按钮传递方面遇到了一些问题。我创建了一个-(void)dealandomword,在这里我从plist中随机抽取一个单词,并在屏幕上输出我的所有子视图。我从viewDidLoad:[self-dealRandomWord]调用它 这是我的问题: #pragma mark Targets _targets = [NSMutableArray arrayWithCapacity:word1len]; for (N
-(void)dealandomword
,在这里我从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));
}
targetView.center坐标等于{0,0}
如何将每个目标的坐标传递给按钮,使其移动到目标。每个“下一步”按钮都应移动到下一个目标
以下是图片:
谢谢你的帮助
这是我的密码:
-(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));
}
-(void)一词{
#pragma标记级别和单词init
NSAssert(self.level.words,@“未加载级别”);
//plist中的随机词
NSInteger randomIndex=arc4random()%[self.level.words count];
NSArray*anaPair=self.level.words[randomIndex];
NSString*question=anaPair[0];//问题
NSString*word1=anaPair[1];//答案
NSString*word2=anaPair[2];//一些字母
NSString*helpstr=anaPair[3];//helper
NSLog(@“qweqweq%@%@%@)”,word1,word2,helpstr;
NSInteger word1len=[word1长度];
NSInteger word2len=[word2长度];
NSLog(@“短语1[%li]:%@),(长)单词1,单词1);
NSLog(@“短语2[%li]:%@),(长)word2len,word2);
NSLog(@“问题%@”,问题);
浮动字体边=天花板(kScreenWidth*0.9/(浮动)最大值(word1len,word2len)-kLetterMargin);
float xOffset=(kScreenWidth-(float)MAX(word1len,word2len)*(letterSide+kLetterMargin))/3;
xOffset+=信纸面/2;
浮动yOffset=1.5*字体边;
#pragma标记问题视图初始化
QuestionView*quv=[[QuestionView alloc]init];
quv.questionLabel.text=问题;
[self.view addSubview:quv];
quv.center=CGPointMake(185210);
#pragma mark PlacesView init
PlacesView*PlacesView=[[PlacesView alloc]init];
[self.view addSubview:placesView];
placesView.center=CGPointMake(185400);
//目标的中心x位置
float xCenterTarget=((placesView.frame.size.width/2)-(word1len/2)*letterSide));
#pragma mark LetterView init
LettersView*LettersView=[[LettersView alloc]init];
[self.view addSubview:lettsview];
lettersView.center=CGPointMake(185500);
#布拉格标记目标
_目标=[NSMutableArray阵列,容量:word1len];
对于(NSInteger i=0;i
-(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));
}