Ios 使用计时器将UIbutton移动到随机位置
我正在Objective C中制作一个简单的应用程序,每次单击按钮时,按钮都会改变屏幕上的位置。第一次单击按钮时,计时器开始计时 问题是,计时器每下降一秒,按钮就会返回其原始位置。如何使计时器不影响按钮移动 以下是我的ViewController.m文件中的代码: 注意:我完全搞不懂这一点。我可能需要有人给我解释清楚,告诉我该怎么做。谢谢 注意:我的UIButton是“黑点”Ios 使用计时器将UIbutton移动到随机位置,ios,objective-c,timer,uibutton,Ios,Objective C,Timer,Uibutton,我正在Objective C中制作一个简单的应用程序,每次单击按钮时,按钮都会改变屏幕上的位置。第一次单击按钮时,计时器开始计时 问题是,计时器每下降一秒,按钮就会返回其原始位置。如何使计时器不影响按钮移动 以下是我的ViewController.m文件中的代码: 注意:我完全搞不懂这一点。我可能需要有人给我解释清楚,告诉我该怎么做。谢谢 注意:我的UIButton是“黑点” -(iAction)主单击按钮{ intxmin=([blackDot frame].size.width)/2; in
-(iAction)主单击按钮{
intxmin=([blackDot frame].size.width)/2;
int ymin=([blackDot frame].size.height)/2;
int x=xmin+arc4random_uniform(self.view.frame.size.width-blackDot.frame.size.width);
int y=ymin+arc4random_uniform(self.view.frame.size.height-blackDot.frame.size.height);
[黑点设置中心:CGPointMake(x,y)];
如果(时间开始<1){
[timerLabel setText:@“时间:0:10”];
[self.view addSubview:timerLabel];
currMinute=0;
秒=10;
[自启动];
}
timerBeginInt=timerBeginInt+1;
}
-(无效)开始
{
计时器=[NSTimer scheduledTimerWithTimeInterval:1目标:自选择器:@selector(timerFired)用户信息:无重复:是];
}
-(无效)时间已满
{
如果((当前分钟>0 | |当前秒>=0)和当前分钟>=0)
{
如果(currSeconds==0)
{
currMinute-=1;
秒=59;
}
否则如果(当前秒数>0)
{
秒-=1;
}
如果(当前分钟>-1)
[timerLabel setText:[NSString stringWithFormat:@“%@%d%@%02d”,“时间:”,currMinute,@:”,currSeconds];
}
其他的
{
[计时器失效];
timerbeginin=0;
}
}
感谢您的帮助!谢谢 替换此
[黑点设置中心:CGPointMake(x,y)]代码>
用这个
[blackDot setFrame:CGRectMake(x,y,blackDot.frame.size.width,blackDot.frame.size.height)];
同时放置断点并记录x,y,xmin,ymin的值,以确认新位置与旧位置不同。
我希望这能帮到你。洛吉亚普斯
我复制你的代码,用我自己的Xcode运行,我发现你的问题让你困惑
简短的解决方案如下:
打开故事板或xib文件,将其关闭。
如果要继续启用自动布局
[self.view removeConstraints:blackDot.constraints];
NSLayoutConstraint* leftConstraint = [NSLayoutConstraint constraintWithItem:blackDot attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0f constant:x];
NSLayoutConstraint* topConstraint = [NSLayoutConstraint constraintWithItem:blackDot attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:y];
leftConstraint.active = YES;
topConstraint.active = YES;
更换setCenter
出于更深层次的原因:
启用autolayout属性后,您无法更改IBOutlet的框架,每次尝试修改框架或中心都是非法的。您只能更改约束以移动IBOutlet
让我困惑的是:
根据代码,单击按钮,按钮将立即移动。但不会移动。因为像setCenter
或setFrame
这样的方法在自动布局中不起作用。
Autolayout需要约束才能将UI(iBouts)放在正确的位置。如果您一直打开Autolayout,然后不对iBouts进行约束,那么可能会发生任何我无法解释的事情。您没有设置,而是尝试设置框架吗?@Mr.t我没有,我应该如何做?如果您想移动按钮,只需更改其框架即可。[按钮设置框:CGRectMake(x、y、宽度、高度)];您可以简单地更改其中的x和y值。如果您在故事板中使用autolayout,您还可以直接修改约束的常量(如果您在类中对约束进行了修改),并更改这些约束的值
[self.view removeConstraints:blackDot.constraints];
NSLayoutConstraint* leftConstraint = [NSLayoutConstraint constraintWithItem:blackDot attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0f constant:x];
NSLayoutConstraint* topConstraint = [NSLayoutConstraint constraintWithItem:blackDot attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:y];
leftConstraint.active = YES;
topConstraint.active = YES;