我正在尝试在运行时生成具有渐变颜色背景(纯色到透明)的视图.有没有办法做到这一点?
我正在开发一个消息传递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) 对于我正在处理的iOS应用程序,我需要按降序获取消息,即最新消息首先出现,然后是第二个最新消息等.
通过查看其他SO答案和研究,似乎我的情况的最佳方法是创建一个负时间戳,然后将其作为消息的额外属性保存到数据库.
然后我将queryOrderedByChild('negativeTimestamp')用于获取a中的消息,然后使用observeSingleEventchildAdded观察器来处理在进行初始调用后发送的消息.
在firebase 文档中,它说我可以从这段代码firebase.database.ServerValue.TIMESTAMP中获取服务器时间戳值.
我如何为Swift 3写这个?
我有一个简单的列表视图,其中包含两行。
每行包含两个文本视图。查看一和查看二。
我想对齐每行的最后一个标签(查看两个),以使名称标签前导对齐并与字体大小无关地保持对齐。
第一个标签(查看一个)也需要对齐。
我尝试在第一个标签(“查看一个”)上设置最小边框宽度,但是它不起作用。设置最小宽度和使文本视图在View One中对齐也似乎是不可能的。
有任何想法吗?在UIKit中,这相当简单。
Firebase 实时数据库安全规则之间auth.uid和其中的区别是什么auth.token.sub?
我假设它们是相同的(用户只有 1 个 uid)但它们有不同的描述,很想知道一个明确的答案。
auth.uid:唯一的用户 ID,保证在所有提供商中都是唯一的。
auth.token.sub:用户的 Firebase UID。这在项目中是独一无二的。
干杯
对于新的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状态?
暂停后,在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) 我正在尝试为我的iOS应用集成Firebase崩溃报告.我正在使用Xcode 8.1,Swift 3以及截至29/11/16的最新Firebase崩溃报告版本.
我已经通过Cocoapods安装了Firebase崩溃报告,并且我已经阅读了下面显示的文档中的有限设置指南,其中我添加了一个带有我的Google App ID的运行脚本以及我的Google Crash Key子文件的路径(服务帐户)
将其替换为您的GoogleService-Info.plist文件中的GOOGLE_APP_ID
GOOGLE_APP_ID = 1:我的:应用程序:ID
将/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崩溃报告控制台中的上传符号文件选项时,我收到此说明.但是我不确定如何实现它.
1:使用命令行导航到Xcode项目文件夹并运行以下命令:
./Pods/FirebaseCrash/batch-upload < service-account-file > my_UUID
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒.
谢谢
对于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) 有没有办法使用组合将对象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)