小编Chr*_*ver的帖子

iOS ARKit 状态 (cameraDidChangeTrackingState) 卡在初始化中,无法跟踪

提前为 newb 问题道歉(在 SO 上的其他地方找不到),但是有没有人在初始化任何和/或所有 ARKit 演示时遇到问题?

举个例子,默认的/vanilla 应用程序——当你创建一个空的 ARKit 项目时你会得到什么。我看到的是飞船悬停在默认视口上方,当我平移时,它几乎保持在视口的中心,而不是固定在空间中,我无法在飞船上方或两侧移动。当我查看 cameraDidChangeTrackingState 中的相机状态属性时,它显示“受限/初始化,但永远不会改变。我觉得我必须遗漏一些明显的东西,比如权利 - 或其他一些设备级别设置?

func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) {
    switch camera.trackingState {
    case .notAvailable:
        print("Tracking: not available: \(camera.trackingState)")
    case .limited(let reason):
        print("Tracking limited: \(reason)") <-- only gets here, with "initializing"
    case .normal:
        print("tracking normal: \(camera.trackingState)")
    }
}
Run Code Online (Sandbox Code Playgroud)

就其价值而言,我使用的是 Xcode 9.0 和 iPhone 8。

谢谢!

ios arkit

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

iOS8:如何从动态框架加载xib

我正在使用Cocoapods预发布0.36来构建私有动态框架并将其部署到应用程序包中.我使用resources属性来复制xibs,它们出现在app bundle中.

s.subspec 'Views' do |ss|
    ...
    ss.resources = ['All/My/Folders/**/*.{xib,png}']
    ...
Run Code Online (Sandbox Code Playgroud)

我试图从xib加载可重用的控件,如下所示:

NSBundle.mainBundle().loadNibNamed("MyXib", owner:loader, options:nil)

但这是失败的,因为它无法在我的嵌入式子框架中找到xib.实际的xib(nib)路径遵循以下模式:'

./Frameworks/MyPrivateFramework.framework/MyXib.nib

我的问题是,是否有一种简单的,代码无关的加载xib的方式,当在iOS 8框架中打包时它将起作用 - 或者我是否必须在上述路径中明确硬编码?上面的加载代码工作,直到我认为动态框架发生了变化.

谢谢

xcode ios cocoapods

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

Swift:捕获逃脱被调用函数的闭包中的inout参数

我试着编写一个"编辑器"类,它可以保留对不同对象上的属性的引用,以便以后进行突变.我首先编写了编辑器类来接收一个用于读取的闭包,以及一个用于写入的闭包.这很有效.然后我尝试通过(inout)引用传递有问题的参数,然后从中生成getter/setter对.这没用.Swift文档确实说(释义)Swift确定何时复制,何时不复制.我认为我反对这种限制的不可预测性,但我认为我提出的问题是一样的.

或者,是否可以为个人吸气剂和定位器获得咖喱功能?

我的代码是:

class SomeModel : Printable {

    var a:String

    init(a:String) {
        self.a = a
    }

    var description:String {
        return "\(self.a)"
    }
}


class Editor {

    var getter:()-> String
    var setter:(String)->()

    init(getter:()-> String, setter:(String)->()) {
        self.getter = getter
        self.setter = setter
    }

    convenience init(inout bindTo:String) {
        self.init(
            getter:{ return bindTo },
            setter: { v in bindTo = v })
    }

    func read() -> String {
        return self.getter()
    }

    func write(value:String) {
        self.setter(value)
    }
}


func testBindTo() {
    var readModel = …
Run Code Online (Sandbox Code Playgroud)

macos ios swift

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

核心文本:获取文本边界的最简单准确方法?

题:

使用Core Text获取给定文本行的边界的最简单准确方法是什么?

问题:

我尝试了多种技术,但结果不一致.

语境:

我一直试图弄清楚如何找到现在的实际界限,一行文本.

核心文本文档最多不完整是关于帧,行和运行级别例程返回的内容,说明它们返回"实际"边界,当它们实际上不同意时(至少在帧级别上),并且不返回特定字符串的实际边界,但似乎返回的大小大于预测的字体大小.

然而,当我得到单个字形的边界时,我确实看到了不同字符之间的差异,向我建议这是唯一准确的方法(迭代所有字形,找到它们的有效结合).

我在一个操场文件中写了一些测试,我错过了一些明显的东西吗?我的最终目标(部分/大部分有效)是使用自定义CALayer获取属性字符串,并对其进行缩放以填充整个边界.然后,这可以很好地与自动布局一起使用,因为我可以根据需要创建一个可以根据我的布局进行缩放的标签.

我的游乐场代码段位于下方,请注意右栏中生成的值.

// Playground - noun: a place where people can play

import UIKit
import CoreText
import QuartzCore

print("start")



let f = UIFont.systemFontOfSize(12)
let t = NSAttributedString(string: "A", attributes: [NSFontAttributeName:f])
let line = CTLineCreateWithAttributedString(t)
var ascent:CGFloat = 0, descent:CGFloat = 0, leading:CGFloat = 0
CTLineGetTypographicBounds(line, &ascent, &descent, &leading)
ascent
descent
ascent + descent
leading

let boundingSize = CGSizeMake(CGFloat.max, CGFloat.max)
let fs = CTFramesetterCreateWithAttributedString(t)
let frameSize = CTFramesetterSuggestFrameSizeWithConstraints(fs, CFRangeMake(0, t.length),
    nil, boundingSize, …
Run Code Online (Sandbox Code Playgroud)

macos core-text ios swift

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

Swift:总是在 inout 上复制?

我编写了一个简单的库来序列化模型数据,后来意识到我只是在读取时才对数据进行写入。我能够将问题简化为以下游乐场片段:

class Foo {
    init() { name = "test" }
    var name:String { didSet { print("setting name: \(self.name)") }}
}


func map(inout foo:String) {
    print("writing value: \(foo)")
}

var foo:Foo = Foo()
map(&foo.name)
Run Code Online (Sandbox Code Playgroud)

结果(对我来说)出乎意料:

写入值:测试

设置名称:测试

我重新阅读了有关inout参数的部分,但没有看到明确提及复制语义。我的预感是,如果没有其他代码这样做,编译器期望该值被覆盖,并使用初始值自行执行此操作。

这似乎是预期的,还是编译器错误?以我的拙见,这是不直观的行为。我并不期待任务,除非它源自我的代码 - 但事实并非如此。

为了说明什么是显而易见的,上面的代码片段不需要 inout 参数,但我一直在使用通用接口进行读写。

swift swift2

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

Swift Generics:比泛型更专业?

XCode 6:Beta 5:

目标:

我正在尝试为语义兼容但不共享(或似乎共享)足够的协议的类型编写通用代码,以便将我的泛型基于共享协议的子集.到目前为止,我还没有找到解决方案,并且想知道我错过了什么或者是否是语言的限制 - 任何见解都值得赞赏.

问题:

我有一些函数只是按类型而不是语义而有所不同,看起来非常适合泛型.我所遇到的问题是,从我所知道的情况来看,Swift看起来像是仿制药的解析时绑定,如果可能存在问题则失败,而不是实际存在问题时.

例:

在一个人为的例子中考虑以下通用函数:

func defVal<T where T:FloatingPointType, T:FloatLiteralConvertible>(T.Type) -> T {
    return 0.0
}

func defVal<T:IntegerLiteralConvertible>(T.Type) -> T {
    return 0
}
Run Code Online (Sandbox Code Playgroud)

请注意,我提供的函数应该跨越整数和浮点数的情况,并且故意不想提供与我无关的所有可能变体的详尽列表.

然后我想定义跨越类型的通用代码 - 在本例中,int和float类型.请注意,即使没有任何调用它的代码,此代码也无法编译:

func doSomethingGeneric<T>(t:T) -> [T]
{
    let a = defVal(T) // Type 'T' does not conform to protocol FloatLiteralConvertible
    let b = a * a   // works
    return [t]
}
Run Code Online (Sandbox Code Playgroud)

在我的回忆中,这将在C++中编译,直到您使用不兼容的类型调用它,此时编译器将捕获它.

我还尝试了其他减少效用的变体:

func doSomethingWithFloats<T
    where T:FloatingPointType, T:FloatLiteralConvertible>(t:T) -> [T]
{
    let a = defVal(T) // works
    let …
Run Code Online (Sandbox Code Playgroud)

generics xcode swift

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

鱼壳:fish_config没有设置背景颜色

我对鱼壳很新,并且在OS X Yosemite上配置有困难.

特别是,我可以运行fish_config并设置前景色,但不能设置背景色.使用Mac终端应用程序和iTerm2时都是如此.

是否能够设置背景预期行为?fish_config是否能很好地干扰哦我的鱼?(我目前没有安装它).

谢谢!

macos terminal fish

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

标签 统计

ios ×4

swift ×4

macos ×3

xcode ×2

arkit ×1

cocoapods ×1

core-text ×1

fish ×1

generics ×1

swift2 ×1

terminal ×1