我想实现像Skype这样的屏幕共享功能(当应用程序在后台时,它也会共享iPhone的屏幕),为此我使用广播扩展。
这是我在 viewcontroller.swift 中的代码
import UIKit
import ReplayKit
@available(iOS 12.0, *)
class ViewController: UIViewController {
var broadcastPicker: RPSystemBroadcastPickerView?
var broadcastSession : NSObject?
override func viewDidLoad() {
super.viewDidLoad()
let kPickerFrame = CGRect(x: 100.0, y: 100.0, width: 100.0, height: 100.0)
broadcastPicker = RPSystemBroadcastPickerView(frame: kPickerFrame)
broadcastPicker?.backgroundColor = UIColor.green
broadcastPicker!.preferredExtension = "com.sharescreen.Recoder"
view.addSubview(broadcastPicker!)
extensionContext?.loadBroadcastingApplicationInfo(completion: {
(bundleID, displayName, appIcon) in
})
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击 RPSystemBroadcastPickerView 时,我会弹出开始广播,当我开始广播时,任何扩展方法都没有调用。
这是我的扩展课程
class SampleHandler: RPBroadcastSampleHandler {
var session : VTCompressionSession?
override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
// User …Run Code Online (Sandbox Code Playgroud) 我检查了共享相同主题的问题,但没有解决我遇到的这种奇怪行为:
说我有一个简单的老学校struct:
struct Person {
var name: String
var age: Int
}
Run Code Online (Sandbox Code Playgroud)
我想超载init在extension这样的:
extension Person {
init(name: String) {
self.name = name
self.age = 26
}
}
Run Code Online (Sandbox Code Playgroud)
如您所料,此代码运行良好。
但是,如果我将其移动Person struct到不同的module(又名不同的框架)并将其公开给我的模块,如下所示:
public struct Person {
public var name: String
public var age: Int
}
Run Code Online (Sandbox Code Playgroud)
如果我现在init在extension本地重载inmodule编译器会产生以下错误:
'self' used before 'self.init' call or assignment to 'self'
'self.init' isn't called on all paths before returning from initializer
我发现避免这个问题的唯一方法是 …
let manager = SocketManager(socketURL: URL(string: "Some url")!, config: [.log(true), .compress])
var socket:SocketIOClient!
var name: String?
var resetAck: SocketAckEmitter?
override func viewDidLoad() {
super.viewDidLoad()
socket = manager.defaultSocket
socket.on(clientEvent: .connect) {data, ack in
print("socket connected")
}
self.socket.on(clientEvent: .error) {data, ack in
print("error")
}
self.socket?.on(clientEvent: .disconnect){data, ack in
print("disconnect")
}
socket.connect()
}
Run Code Online (Sandbox Code Playgroud)
错误 SocketEnginePolling:长轮询请求期间出错
LOG SocketIOClient{/}:处理事件:数据错误:[“错误”]
我目前正在使用 SwiftUI 开发应用程序。
我正在寻找某种方法在工作表视图上制作具有不透明度的背景颜色。
有没有办法做到这一点?
我已经尝试使用下面的代码来做到这一点,我可以使用 opacity 属性更改颜色,但是我在工作表视图下看不到文本(工作表)...
import SwiftUI
struct ContentView: View {
@State var isSheet = false
var body: some View {
Button(action: {self.isSheet.toggle()}) {
Text("Sheet")
}.sheet(isPresented: $isSheet){
Color.yellow.opacity(0.5)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode:版本 11.7
斯威夫特:斯威夫特 5
在更新Xcode之前,我的项目构建良好。
但是现在,我无法再构建该项目。使用Swift 5时,构建项目永远不会完成。它停止在“构建70个100任务”中,并且永远不会完成。这些数字也不总是相同的,但是它永远不会完成。
如果我尝试使用Xcode将项目从Swift 4.2转换为Swift 5,它同样也不会完成转换。
如果我尝试更改工具链以使用Swift 4.2.1版本的工具链,则代码可以成功编译,但是在运行时我会立即崩溃:
dyld: Symbol not found: _$SBOWV
Referenced from: /Users/compc/Library/Developer/Xcode/DerivedData/Swift_Coder-hczsehpbafcwkfgwyameucznmhsp/Build/Products/Debug/Swift Coder.app/Contents/MacOS/../Frameworks/SavannaKit.framework/Versions/A/SavannaKit
Expected in: /usr/lib/swift/libswiftCore.dylib
in /Users/compc/Library/Developer/Xcode/DerivedData/Swift_Coder-hczsehpbafcwkfgwyameucznmhsp/Build/Products/Debug/Swift Coder.app/Contents/MacOS/../Frameworks/SavannaKit.framework/Versions/A/SavannaKit
Run Code Online (Sandbox Code Playgroud)
我尝试清理项目并删除派生数据,但似乎都无法正常工作。
如果使用Xcode 10.1,则该项目将继续构建并正常运行。
我正在使用分段上传图片。该代码在Swift 4和Alamofire 4中可以正常工作。请为此提供任何解决方案。
public class func callsendImageAPI(param:[String: Any],arrImage:[UIImage],imageKey:String,URlName:String,controller:UIViewController, withblock:@escaping (_ response: AnyObject?)->Void){
Alamofire.upload(multipartFormData:{ MultipartFormData in
for (key, value) in param {
MultipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
}
for img in arrImage {
guard let imgData = img.jpegData(compressionQuality: 1) else { return }
MultipartFormData.append(imgData, withName: imageKey, fileName: FuncationManager.getCurrentTimeStamp() + ".jpeg", mimeType: "image/jpeg")
}
},usingThreshold:UInt64.init(),
to: "URL",
method:.post,
headers:["Content-type": "multipart/form-data",
"Content-Disposition" : "form-data"],
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, , ):
upload.uploadProgress(closure: { …Run Code Online (Sandbox Code Playgroud) 我有这段代码:
@available(*, deprecated:3.0, message:"Use activate().")
public func install() {
self.activate()
}
Run Code Online (Sandbox Code Playgroud)
而且由于我已经升级到swift5和xcode 10.2,所以我得到以下警告:
非特定平台“ *”的“可用”属性中的版本号超出预期
并固定为:
将':3.0'替换为''
这是什么警告?它说什么?
背景
我有一个使用AVFoundation的应用程序以拥有自定义相机。这发生在中OCRViewController。当我拍照时,会将捕获的图片发送到其他视图ImagePreviewViewController。
我使用Xcode 10.2.1 (10E1001)与Swift 5
目标
我想实现的是将的方向锁定ImagePreviewViewController为图像的原始方向。我已经知道如何获取图像的方向,但是我无法锁定视图的方向。
我得到这样的图像旋转: let imageOri = capturedImage?.imageOrientation
我尝试了什么?
我尝试了其他来源的公认答案:
在https://developer.apple.com/documentation/uikit/uiviewcontroller#//apple_ref/occ/instm/UIViewController/supportedInterfaceOrientations下的“ 处理视图旋转 ” 下阅读文档,内容如下:
在编写此查询时,我还尝试了许多建议的解决方案,但是,大多数方法似乎使用以下方法(或它的一种变体),它对我不起作用。
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}
override func shouldAutorotate() -> Bool{
return false
}
override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
return UIInterfaceOrientation.Portrait
}
Run Code Online (Sandbox Code Playgroud)
从iOS 8开始,不推荐使用所有与旋转相关的方法。相反,旋转被视为视图控制器视图大小的变化,因此使用viewWillTransition(to:with :)方法进行报告。
但是,我不确定如何从这里开始。
有趣的代码片段
我的中使用了以下方法OCRViewController,在此实例化ImagePreviewViewController并附加捕获的图像。
func displayCapturedPhoto(capturedPhoto : UIImage) {
let imagePreviewViewController = storyboard?.instantiateViewController(withIdentifier: "ImagePreviewViewController") …Run Code Online (Sandbox Code Playgroud) 因此,昨天我将iPhone 6S更新为iOS13.1的第二个开发版本,突然间我的应用程序(在应用程序商店中显示为0崩溃显示在Connect应用程序上)在我的设备上运行时不起作用。但是,它确实可以在Xcode的模拟器中使用。我使用的是Xcode 10.3,但Xcode 11 Beta的功能相同,模拟器也可以在Beta上运行(尽管它们以其他方式破坏了我的应用程序)。
当我点击一个按钮时,应该使我进入所点击按钮的详细视图,但我收到此错误:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
Run Code Online (Sandbox Code Playgroud)
这段代码在哪
// sets up the audio for use in the app --------------------------------------------------------------//
let GetReady = Bundle.main.path(forResource: “Get_Ready_up9db”, ofType: “m4a”)
// this tells the compiler what to do when action is received
do {
audioPlayer_GetReady = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: GetReady! )) // Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category(rawValue: convertFromAVAudioSessionCategory(AVAudioSession.Category.ambient)))
try AVAudioSession.sharedInstance().setActive(true)
}
catch{
print(error)
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么突然这么做,但是因为我不知道为什么,我有点害怕,因为我确定iOS 13很快就会问世。
请帮忙!
我有一个@State变量和异步函数。我想每当该变量发生更改时调用异步函数。
基本上,我正在尝试做的事情
VStack {
Text("")
}
.onChange(of: var) { newValue in
await asyncFunction()
}
Run Code Online (Sandbox Code Playgroud)
但这给了我以下错误
无法将“(Int) async -> ()”类型的函数传递给需要同步函数类型的参数