我在Objective C中创建了一个简单的应用程序,每次单击按钮时,按钮都会更改屏幕上的位置。第一次单击该按钮时,计时器开始计时。
问题是计时器每秒关闭,按钮返回其原始位置。如何使定时器不影响按钮移动?
以下是我的ViewController.m文件中的代码:
注意:我根本无法解决这个问题。我可能需要有人真正拼出来告诉我该怎么做。谢谢!
注意:我的UIButton是“blackDot”
-(IBAction) mainClickButton{
int xmin = ([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);
[blackDot setCenter:CGPointMake(x, y)];
if (timerBeginInt < 1) {
[timerLabel setText:@"Time : 0:10"];
[self.view addSubview:timerLabel];
currMinute=0;
currSeconds=10;
[self start];
}
timerBeginInt = timerBeginInt + 1;
}
-(void)start
{
timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];
}
-(void)timerFired
{
if((currMinute>0 || currSeconds>=0) && currMinute>=0)
{
if(currSeconds==0)
{
currMinute-=1;
currSeconds=59;
}
else if(currSeconds>0)
{
currSeconds-=1;
}
if(currMinute>-1)
[timerLabel setText:[NSString stringWithFormat:@"%@%d%@%02d",@"Time : ",currMinute,@":",currSeconds]];
}
else
{
[timer invalidate];
timerBeginInt = 0;
}
}
任何帮助表示赞赏!谢谢!
答案 0 :(得分:1)
LodgeApps。
我复制你的代码,用我自己的Xcode运行它,我发现你的问题让你困惑。
简短的解决方案就在这里:
如果你想保持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;
替换setCenter
更深层次的原因:
如果启用了autolayout属性,则无法更改IBOutlet的框架,每次修改框架或中心的尝试都是非法的。您只能更改约束以移动IBOutlet。
让我困惑的是:根据代码,单击按钮,按钮将立即移动。但它不会。因为setCenter
或setFrame
之类的方法在Autolayout中不起作用。
Autolayout需要限制才能将UI(IBOutlets)放在正确的位置。如果你保持Autolayout,然后你不对IB做出限制,任何事情都可能发生,我无法解释。
答案 1 :(得分:0)
替换此.central_text{
background:url(../img/circle/new11.png) center center no-repeat;
}
用这个
[blackDot setCenter:CGPointMake(x, y)];
同时放置断点并记录[blackDot setFrame:CGRectMake(x,y,blackDot.frame.size.width,blackDot.frame.size.height)];
的值以确认新位置与旧位置不同。
我希望这会帮助你。