小编And*_*can的帖子

Apple系统日志时间(以毫秒为单位)?

NSLog()使用毫秒级分辨率的时间戳,但是它是一个钝器,因为它的所有日志消息都处于警告级别.

Apple System Log是一个更细粒度的系统,有8个不同的级别.但是......它的时间戳只有1秒的分辨率.我阅读了有关时间格式的手册页,但它们似乎都只是第二种.

很明显,这些信息是可用的,至少对NSLog来说是这样.很多事情可以在一秒钟内继续下去; 有没有办法通过ASL获得更好的分辨率?

macos logging ios

6
推荐指数
1
解决办法
987
查看次数

iOS蓝牙CBC特性UUID已弃用?

在最新的Apple文档中,CBC特性的UUID属性有一条线,并且表示它仅在5.0到7.1中可用.但是,您通常希望看到的"弃用"这个词无处可见.

更重要的是,没有任何关于我们如何识别特征的建议,例如当我们在委托方法中传递一个外设时:didUpdateValueForCharacteristic:.在该方法中,它是决定关键我处理的特点.CBC特征实例的描述符成员是nil.那里还有什么?Apple如何打算让我们区分特征?UUID的重点是识别......

bluetooth ios

6
推荐指数
2
解决办法
2253
查看次数

iOS背景中的文字转语音

我在Apple Watch中触发了在后台播放文字转语音的间歇性(aargh!)问题.我已正确设置后台模式,AVSession类别和WatchKitExtensionRequest处理程序.(见下文.)我之前有过这个工作,并且无法弄清楚改变了什么.(可能是iOS 9有问题吗?"之前"意味着,除其他外,iOS 8.)

问题是:当应用程序从Watch获取请求并且应用程序在后台或手机处于休眠状态(已锁定)时,语音有时会立即播放,而其他时间则无法播放,直到应用程序被带来到前台.操作系统似乎有时排队音频,有时不排队.我在成功和失败案例之间找不到任何共同点.我可以登录,要speakUtterance()的调用验证被造的所有情况.但它的行为有所不同,显然是随机的.唯一的线索是,可能是应用程序在后台运行的时间越长,立即说话的可能性就越小.

这让我脱掉头发.建议欢迎.

在info.plist中:

所需的背景模式:App使用AirPlay播放音频或流音频/视频

在AppDelegate.application中:didFinishLaunching:withOptions():

do {
    try AVAudioSession.sharedInstance().setCategory(
        AVAudioSessionCategoryPlayback, 
        withOptions:.DuckOthers
    )
    try AVAudioSession.sharedInstance().setActive(true)
} catch let error as NSError {
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

在AppDelegate.application中:handleWatchKitExtensionRequest ...():

var bgTaskId:UIBackgroundTaskIdentifier = 0
bgTaskId = application.beginBackgroundTaskWithName(
    "Prose WKE handler",
    expirationHandler: {
        application.endBackgroundTask(bgTaskId)
    }
)
//... Post notification to call Text-to-Speech
application.endBackgroundTask(bgTaskId)
Run Code Online (Sandbox Code Playgroud)

audio text-to-speech background-process ios

6
推荐指数
1
解决办法
1697
查看次数

iOS10中的UITextField textColor更新,而不是iOS 11中的更新

我的代码片段非常小:

self.textField.textColor = color
Run Code Online (Sandbox Code Playgroud)

这是为响应用户交互而调用的.它已经工作多年了.在我的iOS 10设备上它仍然有效.在我的iOS 11设备上,在我点击文本字段之前,颜色不会改变.

错误?特征?解决方法?建议欢迎.

textcolor uitextfield ios

6
推荐指数
2
解决办法
914
查看次数

NSLocalizedString()参数“值”和“ tableName”做什么?

Apple文档(在Xcode和网页中)都没有任何参数说明。

https://developer.apple.com/documentation/foundation/1418095-nslocalizedstring

作为参考,功能签名为

NSLocalizedString(
    _ key    : String, 
    tableName: String? = default,  // ??
    bundle   : Bundle = default, 
    value    : String = default,   // ????
    comment  : String
) -> String
Run Code Online (Sandbox Code Playgroud)

我不清楚这tableName是什么-但更多信息会有所帮助。(这仅仅是字符串文件的文件名吗?)我不知道这value是为了什么。

localization nslocalizedstring ios

6
推荐指数
1
解决办法
1549
查看次数

SwiftUi - 填充宽屏

特尔;博士

我无法在宽屏 (13:6) 手机上将图像准确地绘制到全屏上。如果我观察安全区域,错误是(可预测的)欠扫描。使用.edgesIgnoringSafeArea()(出乎意料地)在另一个方向上走得太远了。

更新

Apple DTS 建议这是一个错误,向我退还了一次支持事件,并邀请我提交错误报告。https://feedbackassistant.apple.com/feedback/8192204正在筹备中

警告讲师

我的假设.scaledToFill可能是错误的。我在最后解决这个问题。

代码

所以基本的我可以把它放在这里,它甚至不会减慢你的速度

struct ContentView: View {
    var body: some View {
        Image("testImage").resizable().scaledToFill()
//        .edgesIgnoringSafeArea(.all)
    }
}
Run Code Online (Sandbox Code Playgroud)

测试图像

测试图像是一个横向矩形,比例为 13:6,就像宽屏手机一样。(例如原始 iPhone X 的 812:375 比例。)灰色边缘不是图像的一部分。

测试图像

它标有其子框架,对应于窄(旧)手机 (16:9) 和打击垫 (4:3)。

运行时结果

Xcode 项目设置明确仅限横向,适用于平板电脑和手机。

对于窄手机和所有键盘,上面的代码,观察安全区域,像我期望的那样呈现测试图像:

第一个结果

但是在宽屏手机上,我无法让红色矩形与屏幕边缘重合。

宽电话

随着调用.edgesIgnoringSafeArea(),这是我们正在观察安全区域。自然地,我们的图像被映射到全屏的一个子集。

宽电话

随着对 的调用.edgesIgnoringSafeArea()。我希望这能完全填满屏幕,但它会过度扫描:

在此处输入图片说明

这是 Xcode 视图层次结构调试器对上一个的看法:图像被映射到一个比全屏的矩形。为什么?

在此处输入图片说明

事件顺序

如果我颠倒修饰符的顺序,并.edgesIgnoringSafeArea() 在之前 调用.scaledToFill(),我会得到纵横比失真,这.scaledToFill()应该可以防止。(请参阅屏幕截图中的圆变成椭圆。)解释这些操作是如何组成的,以及它们为什么不通勤,可能对回答我的主要问题大有帮助。

ipad 11 失真

解决方法

我认为上述应该有效,我不明白为什么不行。什么做 …

layout aspect-ratio safearealayoutguide swiftui

6
推荐指数
1
解决办法
281
查看次数

在 Swift 中转换字符和 CodePoint

我可以直接在 Swift 字符与其 Unicode 数值之间进行转换吗?那是:

var i:Int = ...  // A plain integer index.
var myCodeUnit:UInt16 = myString.utf16[i]
// Would like to say myChar = myCodeUnit as Character, or equivalent.
Run Code Online (Sandbox Code Playgroud)

或者...

var j:String.Index = ... // NOT an integer!
var myChar:Character = myString[j]
// Would like to say myCodeUnit = myChar as UInt16
Run Code Online (Sandbox Code Playgroud)

可以说:

myCodeUnit = String(myChar).utf16[0]
Run Code Online (Sandbox Code Playgroud)

但这意味着为每个字符创建一个新字符串。我已经这样做了数千次(解析文本),因此很多字符串立即被丢弃。

string swift

5
推荐指数
1
解决办法
5902
查看次数

比较 Swift 中的字符

let a:Character = "a"  // Would not really be a literal in my app...
let b:Character = "b"  // ...but this illustrates the issue
let compare = a == b 
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:找不到接受提供的参数的 == 的重载。

尽管事实上如果你右键单击 Character 你可以很容易地找到这个声明

func ==(lhs: Character, rhs: Character) -> Bool
Run Code Online (Sandbox Code Playgroud)

有什么建议?我可以通过将字符分配给字符串并进行字符串比较来解决,但我正在迭代数千个字符。当然有一种快速的方式。

compare character swift

4
推荐指数
1
解决办法
1万
查看次数

38 毫米 Apple Watch 的比例表行高

默认行高正好适合 42 毫米手表的四行。但是在 38mm 手表上,第四排被切断了。

在IB中,我检查了表格的通用“已安装”;对于图像(例如),这会导致自定义大小,但我没有看到表格行高的任何此类选项。或者我只是使用看起来像 Watch Size Classes 的东西,点击底部的“任何屏幕尺寸”?如果是这样,它将如何与“已安装”设置交互?

我打算四处走走,但一些 SmartPerson™ 可以通过指向正确的方向来提供很多帮助。

FWIW,我见过的所有 Apple 示例代码也都有“38mm 截止”问题。

ios watchkit wkinterfacetable

3
推荐指数
1
解决办法
1219
查看次数

让 AVPlayer 的 SwiftUI 包装器在视图消失时暂停

长话短说

\n\n

似乎无法使用绑定来告诉wrappedAVPlayer停止\xe2\x80\x94 为什么不呢?弗拉德的“一个奇怪的技巧” 对我来说很有效,没有状态和绑定,但为什么呢?

\n\n

也可以看看

\n\n

我的问题与此类似,但该海报想要包装一个AVPlayerViewController,我想以编程方式控制播放。

\n\n

这家伙也想知道什么时候updateUIView()被叫到的。

\n\n

发生了什么(控制台日志如下所示。)

\n\n

使用如下所示的代码,

\n\n
    \n
  • 用户点击“去看电影”

    \n\n
      \n
    • MovieView出现并播放视频
    • \n
    • 这是因为updateUIView(_:context:)被称为
    • \n
  • \n
  • 用户点击“返回主页”

    \n\n
      \n
    • HomeView再次出现
    • \n
    • 播放停止
    • \n
    • 再次updateUIView被呼叫。
    • \n
    • 请参阅控制台日志 1
    • \n
  • \n
  • 但是...删除该###行,然后

    \n\n
      \n
    • 即使返回主视图,播放也会继续
    • \n
    • updateUIView抵达时会接到电话,但离开时不会接到电话
    • \n
    • 请参阅控制台日志 2
    • \n
  • \n
  • 如果您取消注释%%%代码(并注释掉其前面的内容)

    \n\n
      \n
    • 你得到的代码我认为在逻辑上和惯用上都是正确的 SwiftUI...
    • \n
    • ...但是“它不起作用”。即,视频在抵达时播放,但在离开时继续播放。
    • \n …

data-binding wrapper avplayer swiftui

3
推荐指数
1
解决办法
2177
查看次数

SwiftUI - 响应父视图中的点击

长话短说:

我想在(父)状态发生变化时触发一个操作。这在声明性上下文中似乎很困难。

评论

这里的挑战是我并不试图使一种视图的属性依赖于另一种视图。这是一个覆盖良好的领域。我可以(并且已经)整天阅读有关共享状态更改的内容。但这是一个事件

我遇到的最好的是arsenius的。他的方法确实有效。我想知道是否有一种更具反应性的方法来做到这一点。也许是一击Publisher?看起来很粗略。

代码

在 FRP 中,“事件”并不总是一个肮脏的词。我可以通过处理相同的View事件来启动动画: View

import SwiftUI

struct MyReusableSubview : View {
    @State private var offs = CGFloat.zero  // Animate this.

    var body: some View {
        Rectangle().foregroundColor(.green).offset(y: self.offs)

        // A local event triggers the action...
        .onTapGesture { self.simplifiedAnimation() }
        // ...but we want to animate when parent view says so.
    }

    private func simplifiedAnimation() {
        self.offs = 200
        withAnimation { self.offs = …
Run Code Online (Sandbox Code Playgroud)

animation event-handling view-hierarchy swiftui

2
推荐指数
1
解决办法
2016
查看次数

Swift Combine - 延迟发布者

TL; 博士

我想推迟发表,但不知道如何,呃,把这些部分结合起来

简单来说

我有一个 Publisher

let generator = PassthroughSubject<Bool, Never>()
Run Code Online (Sandbox Code Playgroud)

并想以某种方式使用修饰符

.delay(for: 2, scheduler: RunLoop.main)
Run Code Online (Sandbox Code Playgroud)

所以当我打电话

generator.send(true)
Run Code Online (Sandbox Code Playgroud)

消息在呼叫后两秒发送 send()

查看文档Publishers.Delay使类型错误更加清晰,但并不能帮助我找到正确的连接方式。

代码

import SwiftUI
import Combine

// Exists just to subscribe.
struct ContainedView : View {
    private let publisher: AnyPublisher<Bool, Never>
    init(_ publisher: AnyPublisher<Bool, Never> = Just(false).dropFirst().eraseToAnyPublisher()) {
        self.publisher = publisher
    }
    var body: some View {
        Rectangle().onReceive(publisher) { _ in print("Got it") }
    }
}

struct ContentView: View {
    let generator = PassthroughSubject<Bool, Never>()
                 // .delay(for: 2, …
Run Code Online (Sandbox Code Playgroud)

delay publish-subscribe combine

2
推荐指数
2
解决办法
5622
查看次数

即使双击按钮,VoiceOver也会读取标签

我为我的UIButton设置了自定义提示.我期望的是,当单击时,按钮将读取提示; 双击提示时不会发出声音,但会发生正常的按钮操作.

但实际上,在双击时再次读取提示,同时正常按钮动作发生.重新阅读会很烦人,但正常的动作是播放不同的声音.他们结合在一起.Yecch!

有人会认为UIAccessibilityTraitPlaysSound是可以使用的东西,但它没有效果.我可以使用AllowDirectInteraction,但会丢失提示.在任何情况下,重读双击提示都是错误的.恕我直言.

audio ios voiceover uiaccessibility

1
推荐指数
1
解决办法
799
查看次数