小编Edw*_*ard的帖子

以编程方式创建具有颜色渐变的UIView

我正在尝试在运行时生成具有渐变颜色背景(纯色到透明)的视图.有没有办法做到这一点?

uiview uicolor ios

282
推荐指数
13
解决办法
21万
查看次数

Firebase存储uid列表的自定义元数据安全规则

我正在开发一个消息传递iOS应用程序,用户可以向多个人发送相同的消息.该消息保存在firebase存储中.我想只启用已发送邮件的用户能够从存储中读取它.我已经在我的firebase数据库中实现了这个规则结构.

为了实现存储,我将iid列表添加到消息文件customMetadata中,包括组成消息的人员的fromUid键.我在iOS应用程序中执行以下操作:

    var metadataValues = [String:String]()

    for friendUid in friendsSelected.keys {
        metadataValues.updateValue(friendUid, forKey: friendUid) // how do I access these values in my security rules
    }
    metadataValues.updateValue(senderUid, forKey: "fromUid") // how do I access this in security rules 
    let messageMetadata = FIRStorageMetadata()
    messageMetadata.customMetadata = metadataValues
Run Code Online (Sandbox Code Playgroud)

这是我尝试为Firebase存储中的消息节点读取和写入安全规则,但它不起作用,文档没有任何帮助.

    match /messages/{messageId} {

        allow read: if request.auth.uid == resource.metadata.request.auth.uid; // I want all friend uids to be able to read file
        allow write: if request.auth.uid == resource.metadata.fromUid; // only the person who create the …
Run Code Online (Sandbox Code Playgroud)

firebase firebase-security firebase-storage

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

如何在swift中创建负Firebase时间戳

对于我正在处理的iOS应用程序,我需要按降序获取消息,即最新消息首先出现,然后是第二个最新消息等.

通过查看其他SO答案和研究,似乎我的情况的最佳方法是创建一个负时间戳,然后将其作为消息的额外属性保存到数据库.

然后我将queryOrderedByChild('negativeTimestamp')用于获取a中的消息,然后使用observeSingleEventchildAdded观察器来处理在进行初始调用后发送的消息.

在firebase 文档中,它说我可以从这段代码firebase.database.ServerValue.TIMESTAMP中获取服务器时间戳值.

我如何为Swift 3写这个?

ios firebase swift firebase-realtime-database

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

使用正确的对齐方式在HStack中对齐两个SwiftUI文本视图

我有一个简单的列表视图,其中包含两行。

每行包含两个文本视图。查看一和查看二。

我想对齐每行的最后一个标签(查看两个),以使名称标签前导对齐并与字体大小无关地保持对齐。

第一个标签(查看一个)也需要对齐。

我尝试在第一个标签(“查看一个”)上设置最小边框宽度,但是它不起作用。设置最小宽度和使文本视图在View One中对齐也似乎是不可能的。

有任何想法吗?在UIKit中,这相当简单。

列表显示

ios swiftui

6
推荐指数
5
解决办法
3646
查看次数

Firebase 实时数据库安全规则中的 auth.uid 和 auth.token.sub 有什么区别

Firebase 实时数据库安全规则之间auth.uid和其中的区别是什么auth.token.sub

我假设它们是相同的(用户只有 1 个 uid)但它们有不同的描述,很想知道一个明确的答案。

auth.uid :唯一的用户 ID,保证在所有提供商中都是唯一的。

auth.token.sub:用户的 Firebase UID。这在项目中是独一无二的。

干杯

firebase firebase-security firebase-realtime-database

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

在SwiftUI中更改UIHostingController的根视图

对于新的SwiftUIiOS应用,我在SceneDelegate

if let windowScene = scene as? UIWindowScene {
    let window = UIWindow(windowScene: windowScene)
    if Auth().token == nil {
        window.rootViewController = UIHostingController(rootView: StartRegistrationView())
    } else {
        window.rootViewController = UIHostingController(rootView: MainTabbedView())
    }
    self.window = window
    window.makeKeyAndVisible()
}
Run Code Online (Sandbox Code Playgroud)

当用户尚未注册或登录时,他们将进入注册流程。

用户注册后,如何将RootView切换到TabView?我似乎找不到使用的任何解决方案SwiftUI

我应该改为使用一个Environment对象并收听如何更改用户Auth状态?

ios swiftui

4
推荐指数
3
解决办法
325
查看次数

暂停后在AVAudioPlayer中,歌曲不会在Swift上继续播放

暂停后,在AVAudioPlayer中,歌曲不会继续,请在Swift上重新开始。问题是当我选择“暂停”按钮,然后再次选择“播放”按钮时,它应该从启动开始。

import UIKit
import AVFoundation
class DetailViewController: UIViewController {

let musicArray:[String] = ["reamon", "sandman"]

var audioPlayer: AVAudioPlayer?

var songIndex:Int = 0

@IBAction func pauseButton(sender: AnyObject) {
    audioPlayer!.pause()

}

@IBAction func playButton(sender: AnyObject) {

    let mySound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(musicArray[songIndex], ofType: "mp3")!)

    do{
        audioPlayer = try AVAudioPlayer(contentsOfURL: mySound)
        audioPlayer!.prepareToPlay()
        audioPlayer!.play()
    } catch {
        print("Error getting the audio file")
    }

}

@IBOutlet weak var stopButtonOutlet: UIButton!

@IBAction func stopButton(sender: AnyObject) {
    audioPlayer!.stop()
    audioPlayer!.currentTime = 0
}

func playSongAtIndex(index: Int) {

    songIndex = index …
Run Code Online (Sandbox Code Playgroud)

xcode avaudioplayer swift pause

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

Firebase崩溃报告iOS - 无法读取的崩溃 - 上传符号文件?

我正在尝试为我的iOS应用集成Firebase崩溃报告.我正在使用Xcode 8.1,Swift 3以及截至29/11/16的最新Firebase崩溃报告版本.

我已经通过Cocoapods安装了Firebase崩溃报告,并且我已经阅读了下面显示的文档中的有限设置指南,其中我添加了一个带有我的Google App ID的运行脚本以及我的Google Crash Key子文件的路径(服务帐户)

  1. 将其替换为您的GoogleService-Info.plist文件中的GOOGLE_APP_ID

    GOOGLE_APP_ID = 1:我的:应用程序:ID

  2. 将/Path/To/ServiceAccount.json替换为刚刚下载的密钥的路径

    "${PODS_ROOT}"/FirebaseCrash/upload-sym "/Path/To/ServiceAccount.json"
    
    Run Code Online (Sandbox Code Playgroud)

我不确定我是否正确实施了第二步.我这样做了

    "${PODS_ROOT}"/FirebaseCrash/upload-sym "${SRCROOT}/******/GoogleCrashKey.json"
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我的应用崩溃报告非常难以理解.我相信我要么上传一个符号文件,要么我第二步错了.

不可读的Firebase崩溃

我如何上传崩溃报告的符号文件.按下Firebase崩溃报告控制台中的上传符号文件选项时,我收到此说明.但是我不确定如何实现它.

1:使用命令行导航到Xcode项目文件夹并运行以下命令:

    ./Pods/FirebaseCrash/batch-upload  < service-account-file >  my_UUID
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒.

谢谢

xcode ios firebase firebase-crash-reporting

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

使用程序约束时如何将CAGradientLayer添加到UIView

对于Swift中的iOS应用,我正在使用程序约束,并想将CAGradientLayer()添加到UIView()。下面是我的代码不起作用。

   import UIKit

   class ViewController: UIViewController {

       let animationView: UIView = {
           let view = UIView()
           view.translatesAutoresizingMaskIntoConstraints = false
           return view
       }()

       override func viewDidLoad() {
           super.viewDidLoad()

           view.addSubview(animationView)
           setupAnimationView()
           animationView.addGradientLayer()
       }

       func setupAnimationView() {
           animationView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
           animationView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
           animationView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
           animationView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
       }
   }

   extension UIView {

       func addGradientLayer() {
           let color1 = UIColor(red: 251/255, green: 55/255, blue: 91/255, alpha: 1.0)
           let color2 = UIColor(red: 1.0, green: 70/255, blue: 0, alpha: 1.0) …
Run Code Online (Sandbox Code Playgroud)

ios cagradientlayer nslayoutconstraint swift

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

在 URLRequest 中使用 Combine 将对象编码为 httpBody

有没有办法使用组合将对象urlRequest.httpBody编码为具有特定错误类型的 AnyPublisher 或从解码返回错误。

我无法让它工作,并且似乎没有使用组合对对象进行编码的代码示例。必须将编码错误强制转换为 AnyPublisher 似乎不正确/不安全。

谢谢

func create(object: ExampleObject, token: Token) -> AnyPublisher<ExampleObject, API.Error> {

    let url = API.EndPoint.players.url
    var urlRequest = URLRequest(url: url)
    urlRequest.httpMethod = "POST"
    urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
    urlRequest.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
    do {
        // is there a safe combine way to encode this
        urlRequest.httpBody = try JSONEncoder().encode(object)
    } catch {
        // Is there a better way to handle this
        return error as! AnyPublisher<ExampleObject, API.Error>
    }

    return session
        .dataTaskPublisher(for: urlRequest)
        .map(\.data)
        .decode(type: ExampleObject.self, decoder: JSONDecoder()) …
Run Code Online (Sandbox Code Playgroud)

swift combine

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