我一直在浏览StackOverflow问题,试图找出我的代码出错的地方,但我似乎无法做到!我正在尝试将我的Swift 1.2项目转换为Swift 2.0,并且我的类遇到了下载JSON数据的问题.
我在void函数中不断收到错误Unexpected non-void返回值.
这是我正在使用的代码,有点截断;
...
class func fetchMinionData() -> [Minion] {
var myURL = "http://myurl/test.json"
let dataURL = NSURL(string: myURL)
let request = NSURLRequest(URL: dataURL!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)
let session = NSURLSession.sharedSession()
session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
let minionJSON = JSON(data!)
var minions = [Minion]()
for (_, minionDictionary) in minionJSON {
minions.append(Minion(minionDetails: minionDictionary))
}
return minions
//THIS IS WHERE THE ERROR OCCURS
}).resume()
}
...
Run Code Online (Sandbox Code Playgroud)
也许我忽略了一些简单的事情,但我不确定为什么我的功能会被视为无效.任何想法都会非常感激!谢谢!
我正在努力将一些 SwiftUI 内容实施到我现有的应用程序中。我目前有一个 UIViewController,它承载一个用于相机预览的 MTKView。
我创建了一个新的 SwiftUI 视图,它现在是我的根视图,如我的SceneDelegate.swift文件中所设置。SwiftUI 视图按预期在启动时加载。现在,我想创建一个 segue,当用户点击我列表中的一行时,它将全屏显示到我现有的 UIViewController。这是我如何称呼它的;
var body: some View {
VStack {
NavigationView {
List(sessionTypes) { session in
NavigationLink(destination: CameraControllerWrapper()) {
SessionRow(session: session)
.frame(height: 40.0)
}
}
.navigationBarTitle(Text("Camera Types"))
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于后代,这是我的CameraControllerWrapperUIViewControllerRepresentable;
struct CameraControllerWrapper: UIViewControllerRepresentable {
typealias UIViewControllerType = CameraController
func makeUIViewController(context: UIViewControllerRepresentableContext<CameraControllerWrapper>) -> CameraControllerWrapper.UIViewControllerType {
return CameraController()
}
func updateUIViewController(_ uiViewController: CameraControllerWrapper.UIViewControllerType, context: UIViewControllerRepresentableContext<CameraControllerWrapper>) {
//
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这“有效”,但一旦调用 CameraController,我的应用程序就会崩溃,因为似乎找不到我的任何 IBOutlets。CameraController 是一个内置在故事板中的 UIViewController。
我正在我的应用程序中的一个函数将我的示例缓冲区中的图像写入AVAssetWriter.奇怪的是,这在10.5英寸iPad Pro上运行良好,但在7.9英寸iPad Mini 2上造成了崩溃.我无法理解相同的代码在两个不同的设备上是如何出问题的.但这是我的代码;
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// Setup the pixel buffer image
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
// Setup the format description
let formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer)!
// Setup the current video dimensions
self.currentVideoDimensions = CMVideoFormatDescriptionGetDimensions(formatDescription)
// Setup the current sample time
self.currentSampleTime = CMSampleBufferGetOutputPresentationTimeStamp(sampleBuffer)
// Handle record
if self.isCapturing {
// Setup auto release pool
autoreleasepool {
// Setup the output image
let outputImage = CIImage(cvPixelBuffer: pixelBuffer)
// …Run Code Online (Sandbox Code Playgroud) 这个问题有点建立在这篇文章的基础上,其中的想法是ARMeshGeometry从带有 LiDAR 扫描仪的 iOS 设备中获取数据,计算纹理坐标,并将采样的相机帧应用为给定网格的纹理,从而允许用户创建一个“逼真的”3D 表示他们的环境。
根据那篇文章,我已经调整了其中一个响应来计算纹理坐标,如下所示;
func buildGeometry(meshAnchor: ARMeshAnchor, arFrame: ARFrame) -> SCNGeometry {
let vertices = meshAnchor.geometry.vertices
let faces = meshAnchor.geometry.faces
let camera = arFrame.camera
let size = arFrame.camera.imageResolution
// use the MTL buffer that ARKit gives us
let vertexSource = SCNGeometrySource(buffer: vertices.buffer, vertexFormat: vertices.format, semantic: .vertex, vertexCount: vertices.count, dataOffset: vertices.offset, dataStride: vertices.stride)
// set the camera matrix
let modelMatrix = meshAnchor.transform
var textCords = [CGPoint]()
for index in 0..<vertices.count {
let vertexPointer = …Run Code Online (Sandbox Code Playgroud) 我正在开展一项任务,我必须创建一个没有填充但是渐变笔划的圆.作为参考,这是我追求的最终结果;
鉴于应用程序的其他情况,我正在画我的圈子;
let c = UIGraphicsGetCurrentContext()!
c.saveGState()
let clipPath: CGPath = UIBezierPath(roundedRect: converted_rect, cornerRadius: converted_rect.width / 2).cgPath
c.addPath(clipPath)
c.setLineWidth(9.0)
c.setStrokeColor(UIColor.blue.cgColor)
c.closePath()
c.strokePath()
c.restoreGState()
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
Run Code Online (Sandbox Code Playgroud)
这导致具有蓝色笔划的圆圈.尽管在SO周围进行了很多搜索,我仍在努力弄清楚如何setStrokeColor用渐变而不是蓝色替换它.我最大的成功来自于创建一个CAGradientLayer,然后用CAShapeLayer路径创建一个掩盖它,但我只能创建一个实心圆而不是空心圆.
谢谢!
我正在努力尝试开发一种从iOS应用程序在我的本地网络上发现Logitech Harmony Hub设备的方法.这个概念的灵感来自于这个 NODE.JS项目,该项目似乎向该255.255.255.255地址发送了UDP广播,然后获得了Logitech的IP地址(这就是我所追求的).当我在Mac上测试家庭网络上的NODE.JS项目时,它成功找到了Logitech Harmony Hub.
我正在使用CocoaASyncSocket,并且必须承认,我对UDP广播/发现如何工作的理解可能在这里.这就是我正在做的事情;
import UIKit
import CocoaAsyncSocket
class ViewController: UIViewController, GCDAsyncUdpSocketDelegate {
var address = "255.255.255.255"
var port:UInt16 = 5224
var socket:GCDAsyncUdpSocket!
var socketReceive:GCDAsyncUdpSocket!
var error : NSError?
override func viewDidLoad() {
super.viewDidLoad()
let message = "_logitech-reverse-bonjour._tcp.local.\n61991".dataUsingEncoding(NSUTF8StringEncoding)
socket = GCDAsyncUdpSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
socket.sendData(message, toHost: address, port: port, withTimeout: 1000, tag: 0)
do {
try socket.bindToPort(port)
} catch {
print(error)
}
do {
try socket.enableBroadcast(true)
} catch {
print(error)
}
do …Run Code Online (Sandbox Code Playgroud) 我试图确定是否有一种方法可以以编程方式设置手势识别器状态,以强制其在实际检测用户输入之前开始。
例如,当检测到长按时,我将平移手势识别器添加到图像中,如下所示;
let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:")
myImage.addGestureRecognizer(longPressRecognizer)
func longPressed(sender: UILongPressGestureRecognizer) {
let mainWidth = UIScreen.mainScreen().bounds.width
let mainHeight = UIScreen.mainScreen().bounds.height
let myView: UIView(frame: CGRect(x: 0, y: 0, width: mainWidth, height: mainHeight)
let gestureRecognizer = UIPanGestureRecognizer(target: self, action: "handlePan:")
myView.addGestureRecognizer(gestureRecognizer)
self.view.addSubview(myView)
}
Run Code Online (Sandbox Code Playgroud)
在该handlePan()函数中,我能够确定平移何时开始和结束;
func handlePan(gesture: UIPanGestureRecognizer) {
if gesture!.state == UIGestureRecognizerState.Began {
print("Started pan")
}
if gesture!.state == UIGestureRecognizerState.Ended {
print("Ended pan")
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,要检测手势何时开始,用户必须(1)长按图像,(2)释放手指,(3)按住并开始平移。理想情况下,我希望用户 (1) 长按图像,(2) 开始平移。
为了实现这一目标,我想我需要找到一种方法来“欺骗”事物,使其相信平移手势已经开始。
注意:实际上,比这里介绍的更复杂,这就是为什么我需要使用平移手势添加子视图,而不是直接将平移手势添加到图像。
我一直在努力学习如何使用 Apple 的示例项目执行 3D 身体跟踪。我的目标是用我自己的 3D 模型替换这个项目中的模型,我已经构建了该模型以匹配该项目中包含的 Apple 可用的“robot.usdz”示例。
在转换为 USDZ 后,我已经成功地将我的 3D 模型导入到 Xcode 中,并将模型附加到 ARBodyAnchor。然而,我的模型(见附件截图)出现在预期的位置,但看起来完全错误。我正在加载模型;
var cancellable: AnyCancellable? = nil
cancellable = Entity.loadBodyTrackedAsync(named: "character/mytest").sink(
receiveCompletion: { completion in
if case let .failure(error) = completion {
print("Error: Unable to load model: \(error.localizedDescription)")
}
cancellable?.cancel()
}, receiveValue: { (character: Entity) in
if let character = character as? BodyTrackedEntity {
character.scale = [0.5, 0.5, 0.5]
self.character = character
cancellable?.cancel()
} else {
print("Error: Unable to load model as BodyTrackedEntity") …Run Code Online (Sandbox Code Playgroud) 我希望有人可以帮助我弄清楚我正在尝试用Swift 2.0编写(或学习写作)的应用程序.这在以前的Swift 1.2中有效,但经过必要的转换后,我不断面对错误;
无法使用类型为'(contenOfURL:NSURL,options:NSDataReadingOptions,error:nil)的参数列表调用类型为'NSData'的初始值设定项'
这是我的代码,略有截断,我正在使用;
...
class func fetchMinionData() -> [Minion] {
let myURL = "https://myurl/test.json"
let dataURL = NSURL(string: myURL)
let data = NSData(contentsOfURL: dataURL!, options: NSDataReadingOptions.DataReadingMappedIfSafe, error: nil)
//THIS IS THE LINE THAT THROWS THE ERROR
let minionJSON = JSON(data)
var minions = [Minion]()
for (_ , minionDictionary) in minionJSON {
minions.append(Minion(minionDetails: minionDictionary))
}
return minions
}
...
Run Code Online (Sandbox Code Playgroud)
请注意,我计划在下载数据后使用SwiftyJSON库进一步解析数据.我在网上无休止地搜索,但我似乎无法弄清楚这一点!谢谢!
我对 Metal 非常陌生,但正在努力遵循 Apple 的AVCamFilter示例项目。该项目演示了使用 MTKView 作为 AVCaptureSession 的预览。
我一直未能成功弄清楚如何让我的 MTKView 呈现“全屏”(特别是在 iPhone X、XS 和第三代 iPad Pro 上)。虽然我的约束在故事板中设置正确,但我的相机预览缩放为不同的宽高比,而不是全屏。
作为测试,我设置;
self.clearColor = MTLClearColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
在我的 MTKView 的 init 中,确认 MTKView 的大小正确(我可以在有问题的区域看到红色背景,但我的相机预览不会拉伸以填充屏幕)。
我相信我的问题存在于这个计算中;
// Calculate scale.
if textureWidth > 0 && textureHeight > 0 {
switch textureRotation {
case .rotate0Degrees, .rotate180Degrees:
scaleX = Float(internalBounds.width / CGFloat(textureWidth))
scaleY = Float(internalBounds.height / CGFloat(textureHeight))
case .rotate90Degrees, .rotate270Degrees:
scaleX = Float(internalBounds.width / CGFloat(textureHeight))
scaleY = Float(internalBounds.height / CGFloat(textureWidth)) …Run Code Online (Sandbox Code Playgroud)