我在位置(30,30,30)有一个SCNCamera,在位于(0,0,0)位置的对象上有一个SCNLookAtConstraint.我正在尝试使用A UIPanGestureRecognizer让相机围绕虚拟球体上的物体旋转,同时保持相机和物体之间的半径.我假设我应该使用四元数预测,但我在这方面的数学知识很糟糕.我知道的变量是x&y平移+我试图保留的半径.我在Swift中编写了这个项目,但Objective-C中的答案也同样被接受(希望使用标准的Cocoa Touch Framework).
哪里:
private var cubeView : SCNView!;
private var cubeScene : SCNScene!;
private var cameraNode : SCNNode!;
Run Code Online (Sandbox Code Playgroud)
这是我设置场景的代码:
// setup the SCNView
cubeView = SCNView(frame: CGRectMake(0, 0, self.width(), 175));
cubeView.autoenablesDefaultLighting = YES;
self.addSubview(cubeView);
// setup the scene
cubeScene = SCNScene();
cubeView.scene = cubeScene;
// setup the camera
let camera = SCNCamera();
camera.usesOrthographicProjection = YES;
camera.orthographicScale = 9;
camera.zNear = 0;
camera.zFar = 100;
cameraNode = SCNNode();
cameraNode.camera = camera;
cameraNode.position = SCNVector3Make(30, 30, 30)
cubeScene.rootNode.addChildNode(cameraNode)
// setup …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的应用程序实现文档提供程序扩展,以允许在应用程序之间导入/导出/移动文件.
我创建了我的主应用程序并将文档提供程序和文件提供程序扩展添加到项目中,检查它们是否构成了每个目标功能中相同应用程序组标识符的一部分.
文档提供程序目标的信息plist具有以下设置:
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>UIDocumentPickerModes</key>
<array>
<string>UIDocumentPickerModeImport</string>
<string>UIDocumentPickerModeExportToService</string>
<string>UIDocumentPickerModeMoveToService</string>
</array>
<key>UIDocumentPickerSupportedFileTypes</key>
<array>
<string>public.content</string>
</array>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>Main</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.fileprovider-ui</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
虽然文件提供程序的info.plist具有以下内容:
<dict>
<key>NSExtensionFileProviderDocumentGroup</key>
<string>group.com.myAppGroupId</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.fileprovider-nonui</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).FileProvider</string>
</dict>
Run Code Online (Sandbox Code Playgroud)
我正在使用UIDocumentPickerExtensionViewController子类和创建目标时生成的NSFileProviderExtension子类的默认实现,并且我在每个方法中都设置了断点来测试它们是否正确运行.
但是当我尝试运行文档提供程序时,我无法将应用程序显示在可用于共享文档的应用程序列表中.我用我的设备和模拟器测试了这个,选择iPhoto和Pages作为主机应用.
我在这里错过了什么吗?
我知道通过使用NSTextAlignment.Natural
你允许标签使用给定语言的默认正确方向绘制它的内容,这有助于堆积本地化,允许标签从英语/西班牙语等语言中从左到右绘制文本. ..,以及从阿拉伯语等语言中从右到左.现在我的问题是我希望在与.Natural相反的方向上绘制标签,所以从左到右的语言,文本应该与右边对齐,从右到左的语言,它应该对齐到左边.
我找不到NSTextAlignment枚举选项.所以我希望有人能就如何做到这一点给我一些建议?
非常感谢!
我正在尝试实现iOS应用程序的可访问性,并且已经涉及到一些细微差别和怪癖.
例如:我的应用程序中有一个标签,上面写着:"这是一个直播活动." 在这种情况下,生活的定义是"当前正在发生的事情",并且在宣布它时应该与"五"押韵.
然而,画外音理解和读取"生活"这个词,如:"活着,让我们死",并用"Give"错误地发音押韵.
同样,我遇到的另一个问题是在"添加选择"的上下文中使用"ADD"一词.在其背景下该词的含义是"在篮子里添加一些东西",但被称为"ADD(注意缺陷障碍)"
在启用应用程序的可访问性时,是否有一种编程方式为文字提供上下文?
我见过几个类似于我的问题; 然而,那些与swift 2/1有关,我目前正在使用swift 3.我相信Apple已经稍微改变了它.
class Person: NSObject, NSCoding {
var signature: UIImage
init(signature: UIImage) {
self.signature = signature
}
required convenience init(coder aDecoder: NSCoder) {
let signature = aDecoder.decodeObject(forKey: "signature") as! UIImage
self.init(signature: signature)
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encode(signature, forKey: "signature")
}
}
Run Code Online (Sandbox Code Playgroud)
你会注意到Swift 3现在如何强迫我使用required convenience init(
而不是required init(
.也许这与它有关.
我该如何解决这个问题?谢谢!
我一直在尝试使用AVAudioEngine来安排多个音频文件以完美的同步方式播放,但是在收听输出时,输入节点之间似乎存在非常小的延迟.音频引擎使用以下图表实现:
//
//AVAudioPlayerNode1 -->
//AVAudioPlayerNode2 -->
//AVAudioPlayerNode3 --> AVAudioMixerNode --> AVAudioUnitVarispeed ---> AvAudioOutputNode
//AVAudioPlayerNode4 --> |
//AVAudioPlayerNode5 --> AudioTap
// |
//AVAudioPCMBuffers
//
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码加载示例并同时安排它们:
- (void)scheduleInitialAudioBlock:(SBScheduledAudioBlock *)block {
for (int i = 0; i < 5; i++) {
NSString *path = [self assetPathForChannel:i trackItem:block.trackItem]; //this fetches the right audio file path to be played
AVAudioPCMBuffer *buffer = [self bufferFromFile:path];
[block.buffers addObject:buffer];
}
AVAudioTime *time = [[AVAudioTime alloc] initWithSampleTime:0 atRate:1.0];
for (int i = 0; i < 5; i++) {
[inputNodes[i] …
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取使用测量格式化程序获得的任何测量的本地化单位符号。
\n\n例如,如果区域设置使用华氏度,但应用程序以摄氏度存储其数据,我将创建一个测量格式化程序,如下所示:
\n\nlet formatter = MeasurementFormatter()\nlet measurement = Measurement(value: 10, unit: UnitTemperature.celsius)\nformatter.string(from: measurement)\n
Run Code Online (Sandbox Code Playgroud)\n\n最后一行将为我提供“50\xc2\xb0F”。\n现在我想从测量中获取“\xc2\xb0F”值。
\n\n我尝试过使用
\n\nformatter.string(from: measurement.unit)\n
Run Code Online (Sandbox Code Playgroud)\n\n但这只给了我“摄氏度”
\n\n提前致谢!
\n我有一个AVAudioEngine设置和一个正在播放一些背景音乐的AVAudioPlayerNode。
我正在尝试找到一种最佳方法,以在2秒的时间内在节点上创建音量渐弱。我正在考虑使用CADisplayLink来执行此操作。我想知道是否有人在这种情况下有经验,可以在方法上给我建议吗?
我刚刚更新到 Xcode 9.3 并且在将我的应用程序提交到应用程序商店时遇到以下问题:
无效的捆绑包 - 无法处理应用程序,因为在提交中检测到不允许嵌入位代码的选项。您可能没有使用 Xcode 中提供的工具链构建应用程序。使用最新的 GM Xcode 重建整个应用程序并再次提交应用程序。
我已经仔细检查过所有链接到我的项目的框架,并且它们都是在启用位码的情况下编译的。这些框架中只有一个是 Carthage 框架,我确保它是使用carthage update
.
我完全被难住了,不知道还能尝试什么。提前感谢您的帮助!
我在 SwiftUI 中构建了一个应用程序,但遇到了一个恼人的问题。
当应用程序出现时,应用程序会显示自定义启动屏幕,同时应用程序的数据会异步加载。完成后,应用程序的主视图将呈现给用户。一旦用户到达这一点,一旦他们将应用程序拖回到后台,导航堆栈就会无缘无故地弹回第一个启动屏幕。
以下是相关代码片段:
MyApp.swift
@main
struct Jam500App: App {
@Environment(\.scenePhase) var lifecycle
init() {
//initial setup goes here
}
var body: some Scene {
WindowGroup {
LaunchView()
}
}
}
Run Code Online (Sandbox Code Playgroud)
LaunchView.swift
struct LaunchView: View {
@ObservedObject var control: LaunchViewControl = LaunchViewControl()
var body: some View {
NavigationView(content: {
ZStack {
//some view hierarchy
NavigationLink(destination: RootView(),
isActive: $control.isReady,
label: {EmptyView()})
}
.onAppear(perform: {
control.loadData()
})
.navigationBarTitle("")
.navigationBarHidden(true)
.statusBar(hidden: true)
}).navigationViewStyle(StackNavigationViewStyle())
}
}
Run Code Online (Sandbox Code Playgroud)
LaunchViewControl.swift
final class LaunchViewControl: ObservableObject {
@Published …
Run Code Online (Sandbox Code Playgroud) 我有一个包含单元测试和UI测试的项目.根据要求,该项目必须同时支持iOS8和iOS9,并且使用持续集成机器人进行设置,该机器人对我们的存储库的每次提交都运行测试.
我希望机器人能够在多个iOS版本的多个设备上运行测试,以确保我们的单元测试在多个操作系统版本中都有效.
但是,我无法找到在iOS9之前运行OS版本的设备上禁用运行UITest的选项,因为iOS8不支持UI测试.但是我还是想在iOS8上运行我的单元测试.
如果我尝试使用iPhone模拟器8.2直接在项目上运行测试,我会收到以下错误消息:"iPhone 6(8.2)"不支持UI测试,因为它运行iOS模拟器8.2并且UI测试需要iOS模拟器9.0或以后."
有任何想法吗?
我正在尝试在Array上创建扩展,我可以在不生成重复组的情况下获得数组的所有可能组合,包括无项目组合。
例如,对于此数组:
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
应生成以下可能的组合:
[[], [1], [2], [3], [4], [1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
请注意,没有一个组重复自己,即:如果有一个组[1,2],则没有其他组:[2,1]。
这是我能得到的最接近的结果:
public extension Array {
func allPossibleCombinations() -> [[Element]] {
var output: [[Element]] = [[]]
for groupSize in 1...self.count {
for (index1, item1) in self.enumerated() {
var group = [item1]
for (index2, item2) in self.enumerated() {
if group.count < …
Run Code Online (Sandbox Code Playgroud)