快速使函数中的计时器无效

2024-03-22

我正在尝试创建一个带有主比赛时钟和开始/停止按钮的曲棍球比赛时钟应用程序。但我的 stopGameclock 函数遇到了问题。计时器不会失效。通过在这里搜索其他问题,我认为这与我有关:

var gameclockTimer = NSTimer()

接缝我不能使用这个变量来使计时器无效。 我知道该功能有效,因为我可以看到“停止”

func stopGameclock() {
    self.gameclockTimer.invalidate() 
    print("stop")

有什么办法可以让这个函数使我的计时器失效吗?

不幸的是,到目前为止我找到的答案对我没有帮助,因为我不需要将计时器和函数放在 ViewController 类中。

我想将计时器保留在单独的类中的原因是因为稍后我将添加几个惩罚时钟/计时器,并且我希望将它们放在单独的类中以方便概览。

到目前为止,完整的代码如下所示:

//  ViewController.swift

import UIKit

class ViewController: UIViewController {

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

override func viewDidLoad() {
    super.viewDidLoad()
    gameclockLabel.text = "00:00"
}

var startstopPushed: Bool = false

@IBOutlet weak var gameclockLabel: UILabel!
@IBOutlet weak var startstop: UIButton!
@IBAction func startStopbutton(sender: AnyObject) {

    if startstopPushed == false {

        Gameclock().startGameclock()
        startstop.setImage(UIImage(named: "stop.png"), forState: UIControlState.Normal)
        startstopPushed = true
    }
    else
    {
        Gameclock().stopGameclock()
        startstop.setImage(UIImage(named: "start.png"), forState: UIControlState.Normal)
        startstopPushed = false
    }

}

}


class Gameclock : NSObject {

var gameclockTimer = NSTimer()
var timeString: String = ""
var seconds = 0
var minutes = 0

func startGameclock() {

   gameclockTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateGameclock"), userInfo: nil, repeats: true)

}

func stopGameclock() {
    self.gameclockTimer.invalidate() 
    print("stop")
}

func updateGameclock() {

    seconds += 1

    if seconds == 60 {

        minutes += 1
        seconds = 0

    }

    let secondsString = seconds > 9 ? "\(seconds)" : "0\(seconds)"
    let minutesString = minutes > 9 ? "\(minutes)" : "0\(minutes)"


    timeString = "\(minutesString):\(secondsString)"
    print(timeString)

}
}

问题是,每次访问 GameClock 时,您都会创建它的一个新实例 - 因此您要停止的实例不是您创建的实例。

您可以将所有功能保留在GameClock类,但您需要在中定义一个变量ViewController来访问它。

class ViewController: UIViewController {
    var gameClock = Gameclock()

然后在你的startstopPushed方法进行这些更改

    if startstopPushed == false {

        //Gameclock().startGameclock()
        gameClock.startGameclock()
        startstop.setImage(UIImage(named: "stop.png"), forState: UIControlState.Normal)
        startstopPushed = true
    }
    else
    {
        //Gameclock().stopGameclock()
        gameClock.stopGameclock()
        startstop.setImage(UIImage(named: "start.png"), forState: UIControlState.Normal)
        startstopPushed = false
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速使函数中的计时器无效 的相关文章

  • UISearchController 在调用时更改状态栏颜色

    我的应用程序中有以下代码 特别是在viewDidLoad 这设置了我的UISearchController self searchController UISearchController alloc initWithSearchResul
  • 与桌面浏览器相比,移动浏览器有多强大? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Objective-c 截断字符串并在末尾添加省略号

    如何在 Objective C 中截断字符串 然后在末尾添加省略号 NSString origString A very long string blah blah blah const int clipLength 18 if origS
  • 获取保存到照片库的图像的 PHAsset/localIdentifier

    我在用着UIImageWriteToSavedPhotosAlbum https www hackingwithswift com example code media uiimagewritetosavedphotosalbum how
  • GIT 中的 Fastlane 应用程序文件?如何检索当前的 apple_id?

    我为我的 XCode 项目设置了 Fastlane 来实现构建自动化 至少 Fastfile 包含构建选项 应该位于 GIT 中 但我也很高兴 Appfile 团队标识符 也位于 GIT 中 主要问题 Appfile 应该包含我的 appl
  • Xcode UI 测试 UIKeyInput typeText

    在 Xcode UI 测试期间 我该如何insertText for a UIView符合UIKeyInput 我创建了一个CodeInputView https github com acani CodeInputView符合UIKeyI
  • 以编程方式设置 UITabBarItem 标题?

    我的应用程序基于标签栏架构 为了有一个简单的国际化机制 我不在 XIB 文件中写入任何字符串 viewdidload 允许以编程方式更改视图中的字符串 当我的应用程序启动时 我可以看到 4 个选项卡 但实际上只有第一个加载其视图控制器 其他
  • iOS 4.2 - 打电话后返回应用程序

    我可以使用以下命令在我的应用程序中成功发起电话呼叫 UIApplication sharedApplication openURL NSURL URLWithString tel 123456789 但是 通话结束后是否可以自动返回应用程序
  • 旋转时自动调整 AVCaptureVideoPreviewLayer 大小的问题

    我编写了一个静态框架 其中有一个名为 ViewfinderViewController 的类 它使用 AVCaptureSession 设置相机 此 ViewController 还将 AVCaptureVideoPreviewLayer
  • 正常运行时间 iOS Objective-C - 毫秒精度

    我正在努力争取 iOS 的正常运行时间 我正在使用 mach absolute time 但我发现它在睡眠期间暂停 我找到了这个片段 time t uptime struct timeval boottime int mib 2 CTL K
  • 影响 UINavigationBar 的后退按钮方法 (iOS)

    我有一个推送到详细视图控制器的表视图 从详细视图控制器中 当我按下 后退 按钮时 我希望更改一个整数值 如何以编程方式编辑导航栏后退按钮的操作 后退按钮会自动放置在我的应用程序中 因为我使用的是表视图 所以我实际上没有创建按钮 所以我不知道
  • 在 UIView 中的贝塞尔曲线路径内像草图颜色一样绘制/绘制

    我正在 UIView 上的 UIBezierPath 的帮助下绘制形状图层 CAShapeLayer pathLayer CAShapeLayer layer pathLayer frame CGRectMake view frame or
  • 填充占位符文本 ios

    我想让占位符文本显示在文本字段的中间 填充占位符文本 占位符文本的大小也需要增加 我的代码如下 我该如何解决这个问题 UITextField textField UITextField alloc initWithFrame CGRectM
  • 在 iOS 中对 Google 地图标记进行聚类

    我有一个基于地图的应用程序 使用 Google 地图的 iOS SDK 我需要在核心数据数据库中存储多达数千个项目 并在地图上用标记显示它们 出于性能和可用性的原因 我需要在用户缩小时对这些标记进行聚类 但我需要确保放置代表性标记 以便用户
  • iOS - 确保在主线程上执行[重复]

    这个问题在这里已经有答案了 我想知道如何打电话给我function on the 主线程 我如何确保我的function被称为主线程 这是继之前的question https stackoverflow com questions 1105
  • 如何从应用程序扩展启动父 iOS 应用程序

    有谁知道如何从应用程序扩展的视图控制器启动父应用程序 我只想从其应用程序扩展启动主应用程序 在 WWDC 会议上为 iOS 和 OS X 创建扩展 第 1 部分 https developer apple com videos wwdc 2
  • 检查 Firebase 中是否存在用户名[重复]

    这个问题在这里已经有答案了 我有一个这样的数据库 users UID1 用户名 用户 1 UID2 Username of user 2 UID3 Username of user 3 UID4 Username of user 4 等等
  • NSExceptionDomains xcode 8 不工作

    我正在使用 UIWebView 来显示电子邮件订阅注册页面 它不是 https 页面 所以我显然需要破例 我不想将其设置为 NSAllowsArbitraryLoads 因为它只是整个应用程序中的一页 应用程序可能会被拒绝 所以我在 inf
  • 调用 popToRootViewControllerAnimated 时未调用 viewWillDisappear

    我从事遗留应用程序的工作 并发现我的view Will Did Disappear方法并不总是被正确触发 情况是 我有一个 自定义 UIViewController在 AppDelegate 中设置为 rootViewController
  • 自定义 UITableViewCell 中按钮上的 IBAction

    使用 iOS 5 我有一个场景 我必须使用自定义单元格创建一个 tableView 自定义单元格有一个名为 TainingCellController 的控制器 UITableViewCell 的子类和一个 NIB 文件 TrainingC

随机推荐