Tag: 电视

仪器:泄漏和分配(tvOS)

我目前正在制作一个tvOS应用程序。 这是我的第一个本地(Swift)应用程序。 该应用程序将是一个数字标牌应用程序,用于事件或公司的办公室。 与iOS / tvOS上的典型应用程序相比,一个很大的区别是它需要全天候运行,所以内存是这个应用程序的一个重要主题。 最小的泄漏最终会导致应用程序崩溃。 该应用程序不断循环遍历一组全屏幻灯片。 在屏幕的底部有一个10篇文章(每10秒更新一次) – 现在正在开发中)。 下面是天气幻灯片的截图,以获得一个想法。  目前该应用程序在一段时间后崩溃,我敢肯定,我已经缩小到股票行情(当禁用它,应用程序生活了几天)。 如果我使用仪器中的“泄漏”预设,我会得到以下结果: 它看起来像是泄漏条款实例。 我正在每10秒重新创build一次实例实例,并将它们提供给股票代码组件。 我认为这就是为什么新的实例泄漏每10秒。 在我开始使用乐器中的“泄漏”预设之前,我使用了“分配”预设,而对我来说这一切似乎都很好。 但是我可能误读了结果 使用分配: 我读到的方式是,目前有10个文章实例存在于内存中,31个已经存在但现在被清理 – 所以我是安全的。 但该应用程序仍然崩溃。 我已经读了很多关于保留周期的内容,在我认为我应该做的事情上实现了弱/无主。 所以我的问题不是关于代码,而是关于如何读取这些数据的更多信息,在这种情况下泄漏是什么意思,以及为什么我在“ 分配”窗口中看到这些“泄漏”不是持久对象? (testing在多个设备+模拟器上完成)

使用Apple TV上的多个控件pipe理焦点

我的屏幕上有多个控件。 在右上方的集合视图,然后是左中心的button,除了button,我有另一个集合视图。 请参阅附件图片 我能够将焦点从button移动到底部收集视图,反之亦然。 我已经为以下内容创build了一个重点指南: focusGuide.preferredFocusedView = self.btn self.view.addLayoutGuide(self.focusGuide) self.focusGuide.topAnchor.constraintEqualToAnchor(collectionViewHeader.topAnchor).active = true self.focusGuide.bottomAnchor.constraintEqualToAnchor(collectionViewBottom.topAnchor).active = true self.focusGuide.leadingAnchor.constraintEqualToAnchor(collectionViewBottom.leadingAnchor).active = true self.focusGuide.widthAnchor.constraintEqualToAnchor(collectionViewBottom.widthAnchor).active = true 并在didUpdateFocusInContext:,我写: override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { super.didUpdateFocusInContext(context, withAnimationCoordinator: coordinator) guard let nextFocusedView = context.nextFocusedView else { return } if(nextFocusedView .isKindOfClass(bottomCell)) { self.focusGuide.preferredFocusedView = self.btn } else { self.focusGuide.preferredFocusedView = self.collectionViewBottom } […]

如何在tvOS上显示GameCenter排行榜?

我想我遵循了所有必要的步骤来支持我的游戏中的排行榜(并且他们在iOS上工作得很好),但是在tvOS上,不能configurationGKGameCenterViewController来显示特定的排行榜, LeaderboardIdentifier属性只是简单的丢失ViewState ): var leaderboardController = new GKGameCenterViewController (); // Unavailable on tvOS /* leaderboardController.ViewState = GKGameCenterViewControllerState.Default; leaderboardController.LeaderboardIdentifier = "myLeaderboardId"; */ leaderboardController.Finished += (sender, e) => { leaderboardController.DismissViewController (true, null); } PresentViewController (leaderboardController, true, null); 我没有使用这些属性,而是按照这里的说明。 我注意到这将在最终的应用程序包中生成一个GKGameCenterContent.plist文件。 我仔细检查了内容: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>GKLeaderboards</key> <array> <dict> <key>identifier</key> […]

任何方式来控制AVSpeechSynthesizer输出到哪个audio通道?

我想使用AVSpeechSynthesizer只在一个多声道环绕声设置的一个audio通道上输出声音。 例如,在5.1系统中,我希望它只在右环绕声道上输出。 现在我有: let synthesizer = AVSpeechSynthesizer() let utterance = AVSpeechUtterance(string: "This is the right channel") synthesizer.speakUtterance(utterance) …然而它在左右声道都输出。

如何用AVPlayerLooper循环播放video

我尝试使用AVPlayerLooper在电视操作系统应用程序中循环播放video,因为在再次播放video时,应该消除暂停/启动。 我观看了WWDC2016videohttps://developer.apple.com/videos/play/wwdc2016/503/并尝试实现代码,但不会循环。 我有一个PlayerViewControllerinheritanceAVPlayerViewController 。 我把代码让video循环。 如果我有下面的代码,它什么都不显示。 如果我把第二行self.queuePlayer = AVQueuePlayer(playerItem:playerItem) ,它只会播放一次。 let playerItem = AVPlayerItem(url: url as URL) self.queuePlayer = AVQueuePlayer() //I declared this as a variable in the view controller self.playerLayer = AVPlayerLayer(player: self.queuePlayer) //I declared this as a variable in the view controller let playerLooper = AVPlayerLooper(player: self.queuePlayer!, templateItem: playerItem) self.view.layer.addSublayer(self.playerLayer!) self.playerLayer?.frame = self.view.frame […]

遥控三星电视从iOS应用程序

我不知道有什么需要开发iOS应用程序,可以用作三星电视的遥控器。 很明显,电视需要连接到networking,并配备了智能电视function。 我想知道是否有可能不修改电视软件/固件。 我没有find任何有关可以处理通信的公共API或来自Samsung的iOS SDK的信息。 据我了解,三星开发者网站上提供的SDK可用于创build可安装在电视上的应用程序。 但是,我注意到AppStore上有几个“遥控器”应用程序,但没有访问三星电视来检查它们是否工作。 我想他们必须使用一些官方的解决scheme,才能通过AppStore审查过程。 也许如果没有官方SDK,可以使用某种通用协议来连接电视机,远程更改频道或检索当前观看的频道信息。 期待从这个话题中得到一些有经验的人的提示,因为我从来没有做过与电视有关的任何事情。 另外,如果你有远程控制其他品牌电视的知识 – 请让我知道它是怎么样的。

如何在Swift中使用选取框function?

我想知道是否有一种方法来启用水平滚动的文字即字幕types的文字。 我已经使用这个库: https : //github.com/cbpowell/MarqueeLabel-Swift,并添加“MarqueeLabel.Swift”文件到我的应用程序。 但到目前为止,它并没有显示我想要的字幕效果。 这是我实现它的方式: class ViewController: UIViewController { @IBOutlet weak var marqueeLabel: MarqueeLabel! override func viewDidLoad() { super.viewDidLoad() self.marqueeLabel.tag = 101 self.marqueeLabel.type = .Continuous self.marqueeLabel.speed = .Duration(5) self.marqueeLabel.animationCurve = .EaseInOut self.marqueeLabel.fadeLength = 10.0 self.marqueeLabel.leadingBuffer = 30.0 self.marqueeLabel.trailingBuffer = 20.0 self.marqueeLabel.restartLabel() } } 我已经根据“ MarqueeLabel Swift not working ”中的解决scheme在界面生成器中设置了自定义类。 它仍然不起作用。 我所得到的只是一个没有选框效果的标签(或水平文本滚动)。 PS:我也是iOS开发新手。 另外,我试图在实现这个库之前使用UIScrollView和UITextView。 […]

无缝地循环播放AVPlayer

以前有关于如何循环播放AVPlayer的video项目的讨论,但没有一个“解决scheme”足够无缝地提供video的无延迟循环 。 我正在开发一个tvOS应用程序,它在一个视图的背景中有一个高质量的“风景”10秒剪辑,并且简单地以“标准”方式重新启动AVPlayer(订阅NSNotification来捕捉它)注意和减损用户体验。 似乎实现真正无缝循环的唯一方法是手动pipe理帧(在OpenGL中)… 尽pipe在这方面做了最大的努力,作为一个操纵videopipe道的新手,我还没有接近到可以理解的解决scheme。 我知道,外部库存在能够更容易地执行此行为; 最显着的是GPUImage 。 然而,我正在开发的应用程序是用于tvOS,因此难以使用相当多的第三方iOS库,包括GPUImage。 我遇到的另一个库是AVAnimator ,它为轻量级animationvideo提供了很好的function,但是不能用于以.H264编码的源素材的密集,高质量video剪辑。 我到目前为止最接近的是苹果公司自己的AVCustomEdit源代码,但是这主要涉及静态生成一个“过渡”,虽然无缝,但对于我来说,能够辨别如何使其执行简单的循环function是非常复杂的。 如果有人能够在较低的层次上操作AVPlayer经验,即使用image processing/缓冲区(或者不依赖于外部库的iOS开发),我会非常感兴趣的知道如何才能开始。