gpt4 book ai didi

objective-c - NSTimer 问题

转载 作者:行者123 更新时间:2023-12-03 17:27:35 25 4
gpt4 key购买 nike

所以我有两个问题,但两者都是相关的。

  1. 我创建了一个“动画”,当单击按钮时,它会移动进度 View NSTimer 。该动画在单击按钮的前几次工作正常,但之后它开始加速该过程,实际上从 NSTimer 的初始开始跳过。循环到 NSTimer 的末尾环形。我想知道是否有人听说过这个问题和/或知道解决方案?

  2. 我在问题 1 中创建了相同的内容,但在 UItableViewCell 中和 NSTimer当按下编辑按钮时,循环被激活。编辑按钮激活具有此 [self.tableView2 setEditing:NO animated:YES]; 的功能和 NSTimer scheduledTimerWithInterval ...(进度 View 动画)。这里的问题是 setEdit 动画不再动画,而是弹出到位。再说一次,有人知道这个问题的解决方案吗?

这是问题 2 的代码(这两个问题的代码非常相似,因此如果您可以在这里发现问题,那么我很可能可以使用该解决方案来解决这两个问题):

-(void)editTable{
[self.tableView2 setEditing:YES animated:YES];
iCount = 8;
iCount2 = 257;
forwardProgress = YES;
animationFlag = YES;
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.001f target:self selector:@selector(increaseAmount) userInfo:nil repeats:YES];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(cancelEdit)];
}

-(void)cancelEdit{
[self.tableView2 setEditing:NO animated:YES];
forwardProgress = NO;
animationFlag = YES;
iCount = 38;
iCount2 = 227;
myTimer = [NSTimer scheduledTimerWithTimeInterval:0.001f target:self selector:@selector(increaseAmount) userInfo:nil repeats:YES];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editTable)];
}

-(void)increaseAmount{
float max = 38.0f;
float max2 = 257.0f;
float min2 = 227.0f;
float min = 8.0f;
if (animationFlag == YES) {
if (forwardProgress == YES) {
if (iCount <= max) {
iCount++;
// NSLog(@"iCount = %i", iCount);
}
if (iCount2 >= min2) {
iCount2--;
// NSLog(@"iCount2 = %i", iCount2);
}
if (iCount <= max) {
[tableView2 reloadData];
}
if (iCount2 >= min2) {
[tableView2 reloadData];
}
if (iCount == max) {
animationFlag = NO;
}
newFrame = CGRectMake(iCount, 33.0f, iCount2, 11.0f);
[tableView2 reloadData];
}else{
if (iCount >= min) {
iCount--;
NSLog(@"iCount = %i", iCount);
}
if (iCount2 <= max2) {
iCount2++;
NSLog(@"iCount2 = %i", iCount2);
}
newFrame = CGRectMake(iCount, 33.0f, iCount2, 11.0f);

if (iCount >= min) {
[tableView2 reloadData];
}
if (iCount2 <= max2) {
[tableView2 reloadData];
}
if (iCount == min) {
animationFlag = NO;
}
}
}

}

最佳答案

任何计时器在完成后都会自行失效,除非它有重复:YES。如果是这种情况,您需要在某个时候自行使其无效,最好是在满足所有条件时。在你的情况下,我认为当你设置animationFlag == 0时你会想要它(我想那是你希望计时器停止触发的时候)。使用这样的东西:

 if ([myTimer isValid]) {
[myTimer invalidate];
myTimer = nil;

您还需要将该代码放在开头的 editTable 中。这样,如果计时器正在运行并且有人再次启动它,它会首先重置,然后再次开始。否则,您将有多个计时器都触发增加量。当用户取消计时器时您也需要它。

关于objective-c - NSTimer 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com