我正在尝试将图像上传到我的服务器,但在上传之前,我需要检查它是否是有效的格式.
假设我只想要.jpeg和.png,所以如果用户从他们的手机中选择.gif格式图像,我会显示一些警告.
我从用户图库/相机获取图像,然后我想检查格式,但我不知道如何检查格式
@IBAction func selectPictureButtonDidPressed(_ sender: Any) {
let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
imagePickerController.allowsEditing = true
let actionSheet = UIAlertController(title: "Photo Source", message: "please choose your source", preferredStyle: .actionSheet)
// action camera
let actionCamera = UIAlertAction(title: "Camera", style: .default) { (action) in
if UIImagePickerController.isSourceTypeAvailable(.camera) {
imagePickerController.sourceType = .camera
self.present(imagePickerController, animated: true, completion: nil)
} else {
self.showAlert(alertTitle: "Opppss", alertMessage: "camera can't be used / not available", actionTitle: "OK")
print("camera can't be used / not available")
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试向2月标签添加点击手势,如上图所示,但我不知道为什么当我向UI标签添加手势识别器时,它不起作用,但如果我将该点击手势指定给视图(蓝盒子,它按照我的预期工作.
我们真的可以在UI Label中添加手势识别器吗?或者我该怎么做才能在UI标签上添加手势?
class AttendanceListVC: UIViewController {
@IBOutlet weak var dummyView: UIView!
@IBOutlet weak var monthLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
prepareTapGestureToChooseMonth()
}
}
func prepareTapGestureToChooseMonth() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(AttendanceListVC.tapFunction(sender:)))
tapGesture.numberOfTapsRequired = 1
monthLabel.addGestureRecognizer(tapGesture)
dummyView.addGestureRecognizer(tapGesture)
}
@objc func tapFunction(sender: UITapGestureRecognizer) {
// show pop up
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个 FAQ 视图控制器,我知道有一个名为“FAQView”的 pod 来制作这个 FAQ 页面,但我需要自定义,所以我自己制作。我希望我的最终结果是这样的
行展开时有一点动画,我需要添加该动画。我的这个常见问题的表格视图是这样的
当某个单元格中的行高从 80 变为 140 时,我想添加动画
这是我的代码,我的视图控制器代码:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var FAQs = [FAQ]()
@IBOutlet weak var tableView: UITableView!
var selectedRow : Int?
var cellIsExpanded : Bool = false {
didSet {
tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
getFAQ()
}
func getFAQ() {
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有此代码的alamofire 4.7.1上传图像,但是老实说,我怀疑我没有编写正确的代码来上传图像
func uploadDefect(defectRemark: String, defectLocation: String, defectImage: UIImage, fileNameImage: String, completion: @escaping(_ errorMessage: String?) -> Void) {
guard let imgData = defectImage.jpeg(.medium) else {return}
let urlUpload = URLService.uploadDefect.endPoint
let username = "admin"
let password = "1234"
let credentialData = "\(username):\(password)".data(using: String.Encoding.utf8)!
let base64Credentials = credentialData.base64EncodedString(options: [])
let headers = ["Authorization": base64Credentials]
let parameters : [String:Any] = ["defect_remark" : defectRemark, "defect_location": defectLocation, "tenant_id" : tenantID]
let url = try! URLRequest(url: URL(string: urlUpload)!, method: .post, headers: headers)
Alamofire.upload(
multipartFormData: { multipartFormData …Run Code Online (Sandbox Code Playgroud) 我的项目文件:https : //drive.google.com/file/d/11llz7ylWe7ACyLMBbqp6YzugUL8hhImt/view?usp=sharing
所以我有 2 个导航图。称为主导航图和身份验证图。
我将主图包含在身份验证图中,反之亦然,身份验证图包含在主图中。
我想实现登录系统,所以当用户成功登录时,用户将转到主活动(具有底部导航视图和工具栏),身份验证活动没有底部导航视图或片段。这是图表
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation_graph"
app:startDestination="@id/destination_home">
<include app:graph="@navigation/auth_graph" />
<fragment android:id="@+id/destination_home" android:name="com.muchammadagunglaksana.navcontroller.HomeFragment"
android:label="Home Judul" tools:layout="@layout/fragment_home">
<action android:id="@+id/action_toAuthActivity" app:destination="@id/auth_graph"/>
</fragment>
<fragment android:id="@+id/destination_camera" android:name="com.muchammadagunglaksana.navcontroller.CameraFragment"
android:label="Camera Judul" tools:layout="@layout/fragment_camera">
<action android:id="@+id/toPhotosDestination" app:destination="@id/destination_photos"/>
</fragment>
<fragment android:id="@+id/destination_photos" android:name="com.muchammadagunglaksana.navcontroller.PhotosFragment"
android:label="Foto Judul" tools:layout="@layout/fragment_photos">
<action android:id="@+id/toHomeDestination" app:destination="@id/destination_home"/>
<argument android:name="numberOfPhotos" app:argType="integer" android:defaultValue="0"/>
</fragment>
<fragment android:id="@+id/destination_settings"
android:name="com.muchammadagunglaksana.navcontroller.SettingsFragment"
android:label="Setting Judul" tools:layout="@layout/fragment_settings"/>
</navigation>
Run Code Online (Sandbox Code Playgroud)
<include app:graph="@navigation/navigation_graph" />
<fragment android:id="@+id/loginFragment" android:name="com.muchammadagunglaksana.navcontroller.LoginFragment"
android:label="fragment_login" tools:layout="@layout/fragment_login">
<action android:id="@+id/action_toMainActivity" app:destination="@id/navigation_graph"/>
</fragment>
Run Code Online (Sandbox Code Playgroud)
当单击 LoginFragment 中的登录按钮时,我使用以下代码:
login_button.setOnClickListener …Run Code Online (Sandbox Code Playgroud) 所以我有一个使用nodeJS编写的firestore触发器函数,当firestore中的文档被删除时,我也想删除Firebase存储中存储的图像,存储中的文件名称与删除的文档ID相同。这是我的功能:
const functions = require('firebase-functions')
// initialize firestore database
const admin = require("../utilities/firebase_admin_init")
const db = admin.firestore()
const storage = admin.storage()
// firestore reference
const eventRef = db.collection('events')
exports.firestoreDeleteEventCleanUp = functions.firestore.document('events/{eventId}').onDelete((snapshot,context) => {
const eventID = context.params.eventId
// how to delete the image in firebase storage in here ????
})
Run Code Online (Sandbox Code Playgroud)
和管理员初始化
const admin = require("firebase-admin")
const functions = require('firebase-functions')
admin.initializeApp(functions.config().firebase)
module.exports = admin
Run Code Online (Sandbox Code Playgroud)
在Android中,我可以这样做来删除存储中的图像
// Create a storage reference from our app
val storageRef = storage.reference
// Create a reference …Run Code Online (Sandbox Code Playgroud) node.js google-cloud-storage firebase google-cloud-functions firebase-storage
我打算使用 Flutter 重新创建我的原生 Android 和 iOS 应用程序,因此在深入研究 Flutter 之前,我想确保我需要的一切都可以在 Flutter 上使用。
因此,在原生 Android 和 iOS 中,我可以手动设置我的数据是来自 Firestore 服务器还是来自使用 Kotlin 代码的缓存,以强制系统仅从缓存中获取数据,而不是从服务器获取数据。
db.document(path).get(Source.CACHE).addOnSuccessListener {
}
Run Code Online (Sandbox Code Playgroud)
我可以使用 FlutterFire 在 Flutter 中拥有相同的行为吗?我试图阅读此处的文档,但找不到。
在我看来 FlutterFire 中的文档不如这里的native 文档完整。例如,可以像这里的答案一样使用 Field Value 进行更新,但我在 FlutterFire 文档中找不到它。
我错过了什么吗?我是 Flutter 的新手 :)
我是 iOS 开发的中级学生,我正在尝试制作一种将图像上传到服务器的方法。我了解 PHP 中的服务器端脚本。
但是当我按照教程在 Xcode 中上传图像时,我并没有真正掌握 NSData、NSObject、NSMutableData、NSString,似乎教程并不是真正的NSData、NSMutableData、NSString的基本方面......
如果想要漂亮的展示,我应该学习自动布局,集合视图等。
那么,我应该学习iOS开发中什么样的主题才能真正一步一步地理解这些东西?似乎我从来没有专门学习过这些东西。我不知道从哪里开始。
上传图片的代码是这样的:
func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData {
let body = NSMutableData();
if parameters != nil {
for (key, value) in parameters! {
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString("\(value)\r\n")
}
}
let filename = "user-profile.jpg"
let mimetype = "image/jpg"
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
body.appendString("Content-Type: \(mimetype)\r\n\r\n")
body.appendData(imageDataKey)
body.appendString("\r\n")
body.appendString("--\(boundary)--\r\n")
return body
}
func generateBoundaryString() -> String {
return "Boundary-\(NSUUID().UUIDString)"
}
}
extension …Run Code Online (Sandbox Code Playgroud) 所以我有这个字符串格式的JSON:
[
"1.0",
"1.1",
"1.2"
]
Run Code Online (Sandbox Code Playgroud)
但我需要在 Kotlin 中将其转换为 ArrayList 吗?我试图找到,但大部分答案都在 Java 中。如果在 Java 中使用 gson 可能会是这样。但我是初学者,我未能将下面的代码转换为 Kotlin
Gson gson = new GsonBuilder().create();
ArrayList<String> theList = gson.fromJson(stringObject, new TypeToken<ArrayList<String>>(){}.getType())
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将该 json 字符串转换为 Kotlin 中的数组列表?
所以从服务器我会得到这样的JSON:
{
"success": "1",
"data": [
{
"id": 1,
"title": "1",
"url": "5",
"image": "resources/assets/images/banner_images/1548316546.mitra lakuin.png",
"type": "category"
},
{
"id": 2,
"title": "2",
"url": "5",
"image": "resources/assets/images/banner_images/1548316605.mobile banner_-02 (1).png",
"type": "category"
},
{
"id": 4,
"title": "4",
"url": "5",
"image": "resources/assets/images/banner_images/1547010221.gratis ongkir.png",
"type": "category"
},
{
"id": 5,
"title": "Customer",
"url": "5",
"image": "resources/assets/images/banner_images/1548316659.customer service.png",
"type": "category"
}
],
"message": "Banners are returned successfull."
}
Run Code Online (Sandbox Code Playgroud)
我创建了2个类,以便将该JSON转换为Banner对象.
// 1.
class BannerData(val message : String, val success : String, val data …Run Code Online (Sandbox Code Playgroud) 我想将用户生成的字符串转换为Date数据类型。我希望时间为24小时制
let dateFormatter = DateFormatter()
let timeAsString : String = "22:30"
dateFormatter.dateFormat = "HH:mm"
let timeFromString = dateFormatter.date(from: timeAsString)
Run Code Online (Sandbox Code Playgroud)
结果:“ 2000年1月1日,晚上10:30 ”
但结果为12小时格式。如何获得22:30作为日期数据类型?