Tag: nstimer

NSTimer的秘密世界

›也可以 在此链接的我的博客上找到本文 。 计时器允许我们在一个或多个计时器间隔后执行一些代码。 有多种类型的时钟可用于创建计时器,即使所有这些时钟显然都以相同的速率运行,它们的行为仍然不同。 我们可以列出以下计时器类型列表: 实时时钟或RTC 。 它是一个计算机时钟(通常为集成电路形式),用于跟踪当前时间。 用户可以任意更改此时钟,而NTP(网络时间协议)则最好使其与外部参考保持同步。 它的值每秒增加一秒钟,但有时可能会更快/更慢或向前跳跃( 这要感谢Gavin Eadie,这使我意识到时钟永远不会向后运行.NTP同步发现时钟在运行如果运行速度快,则在尝试与外部源同步时应放慢速度,直到“实时”赶上 。 单调计时器 。 它的计数器通过使用计时器中断发送到CPU的物理信号递增。 在Apple平台上,此值由Mach内核通过mach_absolute_time()返回。 返回值取决于CPU,因此您不能只将其乘以一个常数就可以得出真实值。 相反,您应该调用系统提供的转换函数将其转换为真实值(CoreAnimation有一个方便的方法:CACurrentMediaTime())。 它在启动时被重置的事实使得获取现实世界中流逝的时间并不那么有趣,但是它是测量两个时间间隔之间差异的最精确方法。 启动计时器 。 它只是一个特殊的单调计时器 ,在系统进入睡眠状态时不会暂停。 获取其值的最常见方法是从终端调用uptime函数。 在Apple平台上,创建计时器的最常见方法是使用NSTimer类。 实际上,它只是围绕单调计时器的包装。 因此,使用NSTimer可能会以无法预料的方式结束,特别是在iOS上,在如上所述的某些极端情况下,机会性的资源使用可能会结束。 为了充分理解NSTimer,我们需要谈一些NSRunLoop; 一旦启动,每个应用程序都会创建第一个NSThread,称为Main Thread; 每个线程都有一个关联的运行循环,该循环管理输入源,例如鼠标,键盘,触摸,连接……以及显然是我们的计时器。 您可以将RunLoop视为等待新消息并将其传递给适当的收件人的邮箱 :它基本上是一种消息传递机制,用于异步或线程间通信。 一些平台(如Windows)将其称为Message Pump,但内部概念仍然相同。 实际上, 运行循环代表了命令行 应用程序 与交互式 (通常是基于UI) 应用程序 之间的主要区别 。 当第一个使用参数启动时,执行它们的内容,然后退出,一个交互式应用程序等待用户输入,对此做出反应并再次等待。 每个线程只有一个Run循环; 一个运行循环由一组要监视的输入源(键盘,触摸等)和一组要通知的观察者组成。 隐式或显式地使用特定的运行模式初始化运行循环。 在其生命周期内, 仅监视与该模式关联的源并允许其传递事件; 仅将与该模式关联的观察者通知新数据。 Cocoa / UIKit定义了几种类型的模式:在iOS上,有一种特殊的模式称为UITrackingRunLoopMode:在控件中进行跟踪时设置。 […]

NSTimer

创建一个名为main的情节提要,并确保在项目的Deployment info中将其设置为主界面。 创建“开始”和“停止”按钮以及两个标签。 一个显示时间,另一个显示消息。 确保按钮是IBActions 。 在头文件中时,将计时器添加到接口中: { NSTimer * timer; int countInt; } 将我们刚刚分配的countInt整数设置为零,并为其分配标签。 使用以下方式设置计时器 ScheduledTimerWithTimeInterval:target:selector:userInfo:nil repeats:方法。 将间隔设置为1.0 (代表计数速度) ,现在将target和self设置为空,并将其设置为空。 userInfo:nil ,为YES 重复布尔值。 3.创建一个辅助计数器方法,暂时将其留空。 现在,我们可以返回到@selector并填写其余内容,如下所示: @selector(counter) 4.我们的stopCounter按钮应该能够做的就是停止计数。 可以用一种简单的方法做到这一点: [timer invalidate]; 5.让我们继续使用辅助计数器方法。 指定您要向上还是向下计数。 我把我的countInt + = 1 ; 目前。 设置标签 self.label.text = [NSString stringWithFormat:@”%i”,countInt]; 使计时器停止在零位置: [计时器无效]; 点击运行,看看它是否有效。 计数器应从零开始,以每秒一的速度加一。 凉。 现在让我们对其进行一些更改。 将startCouner:方法中的countInt设置为10,然后移至counter方法。 使其倒数: countInt-= 1; 然后让它在时间快到时向我们发出警告,并在时间到时打印出一些内容。 […]

NSTimer太慢了

我看到过类似的问题。 然而,他们没有一个解决了我的问题。 我的计时器太慢了。 我只用了0.01秒的时间间隔。 这是我的代码: @IBOutlet var timerLabel: UILabel! var miliseconds = 0 var seconds = 0 func updateLabel() { if miliseconds == 0 { timerLabel.text = "\(seconds).00" } else if miliseconds < 10 { timerLabel.text = "\(seconds).0\(miliseconds)" } else { timerLabel.text = "\(seconds).\(miliseconds)" } } var timer = NSTimer() func updateTime() { miliseconds++ if […]

从另一个视图更新文本标签

我有一个NSTimer ,每10秒运行一次,并从LandingController.m中启动。 它继续运行,当你去应用程序中的其他视图。 我希望能够(当在该定时器内满足特定条件时)从另一个视图更新标签字段GuardMenu.m我想更新的标签名为CurrentZone.text,我想将它从值“N”更新为值“Y”。 这是我在LandingController.m上的计时器 self.messageTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(checkForMessages) userInfo:nil repeats:YES]; 在LandingController.m上调用它 – (void)checkForMessages { if ( //some condition here ){ //update CurrentZone.text label in GuardMenu view and set equal to "Y" } else { //no need to update label in GuardMenu as it's currently equal to "N" } }

如何将毫秒添加到秒表应用程序?

好的,所以我在这里基于我的秒表应用程序代码http://iphonedev.tv/blog/2013/7/7/getting-started-part-3-adding-a-stopwatch-with-nstimer-我们的头等舱我喜欢它的设置方式,但是我不知道如何给它增加百分之一秒,任何人都知道如何做到这一点? 我的ViewController.m文件 #import "ViewController.h" #import "Foundation/Foundation.h" @interface ViewController () @end @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; } – (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } – (NSTimer *)createTimer { return [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerTicked:) userInfo:nil repeats:YES]; } – (void)timerTicked:(NSTimer *)timer { _currentTimeInSeconds++; self.timeLabel.text = [self formattedTime:_currentTimeInSeconds]; } – (NSString *)formattedTime:(int)totalSeconds { int hundredths = totalSeconds % […]

如何用定时器重复调用一个方法(重新加载…)来为一个转换设置animation

我在我的xcode项目中实现了corePlot 。 我试图用animation“爆炸”饼图的一部分。 这是我正在使用的方法: – (void)radialOffsetForPieChart:(CPTPieChart *)pieChart recordIndex:(NSUInteger)idx { if (myIndex == idx) { return 20; } return 0; } 我有另一种方法调用[pieChart reloadRadialOffset]; 。 例如: – (void)thisMethod { [pieChart reloadRadialOffset]; } 我如何animationreloadRadialOffsets ?

NSTimer崩溃,访问不好

我有以下方法来更新显示简单时间的标签 -(void)updateTimeLabel:(NSTimer *)timer{ NSInteger secondsSinceStart = (NSInteger)[[NSDate date] timeIntervalSinceDate:_startTime]; 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, […]

如何每秒更新UICollectionViewCell的UILabel(swift)

我有一个UICollectionViewCell与UILabel显示两个date之间的日差。 我想每秒更新一次。 我曾尝试使用NSTimer重新加载UICollectionview的数据,但它使得用户界面非常慢。 我如何去实现这个? 谢谢。

Swift:NSTimer自动结束,不会倒计时

Swift新手在这里。 我有两个问题: 首先,如何创build一个计时器,当一个ViewController场景打开时自动倒计时? 我的问题是,当场景被打开时,NSTimer会自动结束。 例如,每当我去上述场景,TimerLabel说:“时间了! 在我的第二个问题之前,下面是我的调整代码:makeapppie.com/…/swift-swift-using-nstimer-to-make-a-timer…/ var timer = NSTimer() let timeInterval:NSTimeInterval = 0.05 let timerEnd:NSTimeInterval = 120.0 //Timer should end in 120 seconds var timeCount:NSTimeInterval = 0.0 func timerDidEnd(timer:NSTimer){ timeCount = timeCount – timeInterval if timeCount <= 0 { TimerLabel.text = "Time's Up!" timer.invalidate() } } func timeString(time:NSTimeInterval) -> String { let minutes = […]

NSTimer没有及时解雇

我试图连接到一个给定的IP地址端口。 一个问题是当build立一个不存在IP地址的连接时,write命令(如下): NSData * imageRequest = [@"640" dataUsingEncoding: NSUTF8StringEncoding]; int image = [self.outputImageStream write:[imageRequest bytes] maxLength:[imageRequest length]]; 它需要超过75秒的回应。 我尝试通过下面的方法调用来启动一个计时器: self.connectionTimeoutTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(respondToTimer:)userInfo:nil repeats:NO]; 它在我定义的1秒间隔内没有被调用。 有什么办法可以确保定时器在1秒内发射?