NSTimer 暂停不起作用

2023-12-21

我设置了三个按钮start,stop,pause。并给 NSTimer 提供控制来计算。开始停止按钮工作正常,给了我开始和停止时间,但是pause按钮没有给我准确的时间。它实际上是暂停时间..但再次开始它会添加暂停的计时和显示[ay。 假设我在开始 5 秒处暂停并等待 5 秒,然后按开始...它应该显示 5 ...但显示 10 ..

-(void)start:(NSTimer *)timer
{
  if(_timer==nil)
  {
    startDate =[NSDate date];

    _timer=[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timer:) userInfo:nil repeats:YES];
  }

  if(_timer!=nil)
  { 
    float pauseTime = -1*[pauseStart timeIntervalSinceNow];

    [_timer setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]];
  }

}

-(void)timer:(NSTimer *)timer
{
  NSInteger secondsSinceStart = (NSInteger)[[NSDate date] timeIntervalSinceDate:startDate];

  NSInteger seconds = secondsSinceStart % 60;
  NSInteger minutes = (secondsSinceStart / 60) % 60;
  NSInteger hours = secondsSinceStart / (60 * 60);
  NSString *result = nil;
  if (hours > 0) 
  {
    result = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
  }
  else 
  {
    result = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];        
  }

  label.text=result;

  NSLog(@"time interval -> %@",result);
}

-(void)stop
{
  if(_timer!=nil)
  {
    endDate = [NSDate date];
 NSLog(@"endate%@",endDate);

     NSTimeInterval interval = [endDate timeIntervalSinceDate:startDate];
NSLog(@"total time %f",interval);
    [_timer invalidate];
    _timer = nil; 
  startDate=nil;
  }
}

-(void)pause:(NSTimer *)timer
{
  pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];

  previousFireDate = [_timer fireDate];

  [_timer setFireDate:[NSDate distantFuture]];
}

我已经创建了这个应用 http://www.keepandshare.com/doc/5387039/timerstopwatch-3-zip-43k?da=y在 Mac 操作系统上。我认为您可以理解其中的逻辑,甚至可以通过细微的更改来复制它......至于 UILabel。

In .h

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;

- (IBAction)start:(id)sender;
- (IBAction)pause:(id)sender;
- (IBAction)stop:(id)sender;
@property (strong) IBOutlet NSTextField *label;

@property (strong)NSDate *startDate;
@property (strong)NSTimer *timer;

@property (assign)BOOL isRunning;
@property (assign)BOOL isPaused;

@property(assign)NSInteger secondsSinceStart;

@property(assign)NSInteger secondsPaused;
@end

In .m

#import "AppDelegate.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    self.label.stringValue=@"00:00:00";
    self.isRunning=NO;
    self.isPaused=NO;
    self.secondsPaused=0;
}

-(void)timerDisplay{

    if (self.isPaused) {
        self.secondsPaused++;
        return;
    }

    self.secondsSinceStart+=1;

    NSInteger seconds = self.secondsSinceStart % 60;
    NSInteger minutes = (self.secondsSinceStart / 60) % 60;
    NSInteger hours = self.secondsSinceStart / (60 * 60);
    NSString *result = nil;


    if (self.isRunning && !self.isPaused) {
        result = [NSString stringWithFormat:@"%02ld:%02ld:%02ld", hours, minutes, seconds];
        self.label.stringValue=result;
    }
}


- (IBAction)start:(id)sender {
    self.isRunning=!self.isRunning;
    self.isPaused=NO;
    self.secondsSinceStart=0;
    self.label.stringValue=@"00:00:00";


    self.startDate =[NSDate date];
    if (!self.timer) {
        self.timer=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerDisplay) userInfo:nil repeats:YES];
    }
}

- (IBAction)pause:(id)sender {
    self.isPaused=!self.isPaused;
    NSLog(@"pause : %d",self.isPaused);
}

- (IBAction)stop:(id)sender {
    self.isRunning=NO;
    NSLog(@"start : %@",self.startDate);
    NSLog(@"end : %@",[NSDate date]);
    NSLog(@"paused : %ld",self.secondsPaused);

    NSInteger totalTime=self.secondsSinceStart+self.secondsPaused;

    NSInteger seconds = totalTime % 60;
    NSInteger minutes = (totalTime / 60) % 60;
    NSInteger hours = totalTime / (60 * 60);
    NSString *result = result = [NSString stringWithFormat:@"%02ld:%02ld:%02ld", hours, minutes, seconds];
    NSLog(@"Total : %@",result);

}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSTimer 暂停不起作用 的相关文章

  • Objective-C 2.0中的多线程问题

    我有我的主应用程序委托 其中包含一个返回对象的方法 该应用程序委托在主线程上运行 我还有一个在不同线程上运行的 NSOperation 除了希望有时能够在主线程上调用我的应用程序委托方法之外 我还需要从 NSOperation 线程中调用它
  • 如何将 Default.png 置于横向模式?

    我有 Default png 480 320 图像 我的问题是 当我启动应用程序时 Default png 图像以横向模式显示 这怎么可能 首先 预先旋转您的初始图像 以便获得纵向和横向版本 然后 使用Default Portrait pn
  • 如何将 AdMob 广告添加到 UITableView

    我正在尝试将 AdMob 广告添加到表格视图中 我希望它出现在每 10 个单元格中 例如 如果您有 Reddit 应用程序的免费版本 就像它一样 我尝试遵循 AdMob 文档 但没有任何运气 而且我确信我遗漏了一些东西 任何人都可以阐明一种
  • iOS 7 键盘颜色闪烁

    在 iOS7 中 我将界面生成器中 UITextField 的键盘设置为深色样式 但是 每当我单击文本字段时 键盘最初显示为浅色 然后再转到深色样式 我怎样才能拥有它不这样做吗 这是iOS 7中的一个错误 我一直在处理同样的问题 它已在 i
  • 使用 NSPredicate 来检测 NOT CONTAINS

    我放弃 我已经尝试了我能想象到的所有组合来检查一个字符串是否包含另一个字符串 这是描述我想要做的事情的直观语法示例 NSPredicate pPredicate NSPredicate predicateWithFormat NOT K C
  • 按钮图像未显示在 UItextfield 的 rightView 中

    我创建了一个按钮图像 并使用 Sa wift 将其放置在 UITextField 密码 的 rightView 上 我想在密码字段中创建切换按钮隐藏 显示安全文本 右视图中显示的图像 Code func passwordToggleButt
  • 使用自定义组件:子类 UIView 或 UIViewController?

    我正在研究 UISegmentedControl 的自定义实现 我想创建一个能够接收配置数据并从中获取类似于 UISegmentedControl 的自定义视图的组件 我开始对 UIView 进行子类化 我可以使用以下代码创建自定义 UIS
  • 如何从静态图像中读取二维码

    我知道你可以使用AVFoundation使用设备的摄像头扫描 QR 码 现在问题来了 我该如何从静态中做到这一点UIImage object Neimsz 的 Swift 4 版本answer https stackoverflow com
  • iOS 有没有办法通过按钮调整图像大小?

    如下图所示 按钮的图像跨越了按钮边界 有没有办法通过故事板或以编程方式使图像适合按钮的边界 更改按钮Style from Plain to Default 这是一个限制为60 x 60 with a 80 x 80图像与Style Plai
  • cllocation 和 mkreversegeocoder

    我尝试使用 cllocation 和 mkreversegeocoder 检索城市名称 在我的 viewdidload 方法中 我是 cllocationmanager self locManager CLLocationManager a
  • AVAudioRecorder 可以用来录制来自 iOS 应用程序的音频吗?

    我想录制即将到来的音频from我的 iPhone 应用程序 因此 在混合背景音乐和声音效果之后 我想在从设备的扬声器 或耳机 播放音频之前对音频进行采样 我一直在尝试RemoteIO 音频单元 http developer apple co
  • AVAudioPlayer 重置当前播放的声音并从头开始播放

    我在使用 AVAudioPlayer 时遇到问题 我想重置当前正在播放的播放器并再次播放 我尝试以下但没有运气 声音播放一次 但第二次我选择按钮时它会停止声音 第三次再次启动声音 Stop the player and restart it
  • 如何通过 swift 包管理器在 swift 项目中添加 Alamofire [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在探索 SPM 现在我需要知道如何在我的项目中通过 SPM 导入 Alamofire 创建一个名为的 swift 文件Package在你
  • 在 iOS 中以编程方式配置代理设置

    如何在 iOS 中以编程方式配置代理设置NSURLSession 我跟着这个link https stackoverflow com questions 28101582 how to programmatically add a prox
  • SwiftUI 查看所有视图,包括工作表视图

    我需要根据某些条件在所有视图之上显示一个视图 无论顶视图是什么 我正在尝试以下代码 struct TestView
  • 控制 NSLayoutManager 中自定义文本属性周围的间距

    我有一个习惯NSLayoutManager我用来绘制药丸状标记的子类 我使用自定义属性为子字符串绘制这些标记 TokenAttribute 我会画画没有问题 但是 我需要在范围周围添加一些 填充 TokenAttribute 这样标记的圆角
  • 如果以前录制并播放了电影,AVAudioRecorder 将不会录制

    我的 iPhone 应用程序使用 AVAudioRecorder 进行录音 它还使用 UIImagePickerController 来录制电影 使用 MPMoviePlayerController 来播放电影 一切正常 直到我连续完成所有
  • 将粗体应用于 NSAttributedString 的一部分,同时保留字体大小和外观

    我正在为 iOS 开发一个富文本编辑器 使用UITextView连同一个NSAttributedString 它的功能与传统功能类似 即选择一个区域 单击一个按钮 并将该效果应用于该区域 同时保留文本上的任何其他属性 不幸的是NSAttri
  • 处理 iPhone X 系列上 Chrome 浏览器中的安全区域

    对于我管理的网站 我正在使用新的 iPhone X 系列屏幕安全区域safe area inset
  • iPhone 操作系统测试最佳实践

    不久前 iPhone 的开发还相当简单 只有几个操作系统版本 甚至更少的设备 然而现在 有 2 个主要操作系统版本和 5 种不同的设备需要考虑 作为一家即将发布多个应用程序的公司 测试已成为越来越重要的问题 测试所有组合的最佳方法是什么 我

随机推荐

  • 版本“extensions/v1beta1”中没有匹配类型“Deployment”

    部署 mojaloop 时 Kubernetes 响应以下错误 错误 验证失败 无法识别 类型不匹配 版本 apps v1beta2 中的 部署 无法识别 否 匹配版本 extensions v1beta1 中的种类 Deployment
  • 可变参数 - 编译器错误无法将类型“[Int]”的值转换为预期参数类型“Int”

    新到迅速 不确定为什么编译器会给出以下代码的错误 func addNumbers numbers Int gt Int var total Int 0 for number in numbers total number return to
  • 使用 WPF 绘图时如何消除这些“尖峰”视觉伪影?

    我当前正在为地图应用程序绘制一些图块 小方形图像 我正在使用 WPF 在这些图块上绘制形状 我有一个地理空间坐标列表 它们组成了绘制的多边形 组成这些多边形的地理空间坐标被转换为像素坐标 这些图块是按照各种设定的细节级别创建的 在大多数细节
  • Angular:在配置/运行之前加载环境属性

    我正在开发一个 Angular 应用程序 该应用程序有大约 10 个可配置属性 取决于环境和客户端 我在 json 配置文件中拥有这些属性 但这确实很麻烦 每个环境 公司必须有特定的构建 所以我想在应用程序加载时从后端检索这些属性 所以为了
  • 使用 WPS 隐藏登录插件后,我被锁定在 WordPress 之外

    我有一个我建立的 WordPress 网站 我已经安装并使用了 WPS 隐藏登录插件来帮助提高安全性 如果有帮助的话 我将登录 URL 的值保留为我认为的默认值 login 当我去 login 登录屏幕出现 我输入正确的凭据 几秒钟后我被重
  • 在 O(E logV) 中求图中的单调最短路径

    创意题第 34 题这一页 http algs4 cs princeton edu 44sp 单调最短路径 给定一个边加权有向图 找到一条从 s 到所有其他顶点的单调最短路径 如果路径上每条边的权重严格递增或严格递减 则路径是单调的 部分解决
  • 如何使用 Scipy 处理巨大的稀疏矩阵构造?

    因此 我正在处理维基百科转储来计算大约 5 700 000 个页面的页面排名 这些文件经过预处理 因此不是 XML 格式 它们取自http haselgrove id au wikipedia htm http haselgrove id
  • 有什么方法可以从另一台计算机上使用 exe4j 运行由 jar 制成的 exe 吗?

    我制作了一个 GUI 程序来输入内容 然后将 javamail 发送到我的电子邮件 我必须从 javamail 1 4 5 导入许多 jar 库 然后将其构建 shift f11 为 jar 然后使用 exe4j 使其成为 exe 还添加
  • 使用不同的参数模拟相同的方法

    我正在使用mockito来测试我的业务服务 它使用了我想要模拟的实用程序 每个服务方法中至少有 2 3 个具有不同参数的实用程序调用 有没有推荐的方法来使用多个when thenReturn 对于相同的方法但不同的参数 我也想用any 游行
  • Android Studio 1.2 - 默认情况下项目编码不匹配

    我是一个Android菜鸟 刚刚升级到Android Studio 1 2 当我创建一个新项目 API 16 Android 4 1 Jelly Bean 时 我立即收到以下警告 警告 项目编码 windows 1252 与 Gradle
  • 如何用java实现SOA?

    我是 SOA 的新手 我想知道如何在 Java 中实现 SOA 我正在浏览各种仅处理概念的站点 它没有给出有关实现细节的清晰想法 以便在 Java 中使用 SOA 请提供有关如何实施 SOA 的详细信息 Thanks SOA 是关于设计原则
  • 向 Android SwipeRefreshLayout 添加文本提示

    如何在 listView 的顶部添加提示 例如 下拉刷新 该提示包含在 android support v4 的 swipeRefreshLayout 中 下拉刷新有效 但我想在用户稍微向下拉列表视图时添加文本 编辑 2014 年 10 月
  • Powershell 命令将断开连接的用户踢出服务器

    是否有一个 powershell 命令可以用来将 断开连接 的用户踢出服务器 一旦我知道踢单个用户的单行代码 我就可以编写脚本 例如 我想踢掉下面对话框中看到的 8 个用户 我不能尝试这个 pc qwinsta server YourSer
  • Ionic - 如何禁用 Android 键盘上的键盘建议

    我已经尝试了所有 ion textarea 的可能性 例如 type email 等 我无法让它在所有 Android 版本上工作 我已经安装了 cordova plugin ionic keyboard 它显示了没有建议的键盘 图 A 但
  • 使用 OpenID 登录时如何转义 URL 中的 & 符号?

    好吧 实际上我知道 我应该用 26 替换 但我使用此 URL 通过 OpenID 登录 如您所见 continue 参数已正确转义 但是在通过 Google 登录页面重定向后 它会将我重定向回 https innubili gidea ap
  • 如何为 UITabBarItem 创建操作?

    我创建了一个没有 UITabBarController 的 UITabBar 和 UITabBarItems 现在我想知道如何在单击 UITabBarItem 时放置一个操作 我应该使用什么方法对 UITabBarItem 执行操作 您无法
  • VSCode 重新映射键盘快捷键

    I have been trying for awhile now to remap the Ctrl Tab and Ctrl Shift Tab keys to switch editor tabs linearly Like they
  • 使用 Ruby 1.9.3 时出现“证书验证失败”OpenSSL 错误

    我在 Mac OS 10 6 8 上使用 Ruby 1 9 3p0 使用 rvm 安装 当我尝试使用创建新的 Rails 应用程序时托管在 GitHub 上的应用程序模板 https github com RailsApps rails3
  • 如何 printf 像表格一样对齐我的输出?

    printf 如何像表格一样对齐输出 Title Author BaokyBook Baoky2 Use basename commandUse basename command Baoky 我的部分代码是这样的 titlelength t
  • NSTimer 暂停不起作用

    我设置了三个按钮start stop pause 并给 NSTimer 提供控制来计算 开始停止按钮工作正常 给了我开始和停止时间 但是pause按钮没有给我准确的时间 它实际上是暂停时间 但再次开始它会添加暂停的计时和显示 ay 假设我在