我有一个UIDocumentPickerViewController只选择图像。这在 iOS 13 中运行良好:
let supportedTypes: [String] = ["public.image"]
let documentPickerViewController = UIDocumentPickerViewController(documentTypes: supportedTypes, in: .import)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 iOS 14 中实现相同的目标。
但是,init(documentTypes:in:)在 iOS 14.0 中已弃用。
所以我假设我必须使用这个初始化程序: init(forOpeningContentTypes:asCopy:)
该forOpeningContentTypes参数需要一个UTType.
我不确定如何使用/导入它。
像[UTType.Image]吗?
let supportedTypes: [UTType] = [UTType.Image]
self.viewController = UIDocumentPickerViewController(forOpeningContentTypes: supportedTypes, asCopy: true)
Run Code Online (Sandbox Code Playgroud)
这甚至不会编译,因为Cannot find type 'UTType' in scope.
我也试过import MobileCoreServices甚至import CoreServices,但这没有帮助。
文档初始化为新的文件选择器指向此UTTypeReference -所以我试图用,但它也不能被发现。
我如何才能UIDocumentPickerViewController在 iOS 14 中只选择图像?
更新
这有效(感谢@Warren):
import UniformTypeIdentifiers …Run Code Online (Sandbox Code Playgroud) 考虑如下图所示的场景:
三张照片,其中一张是大型GIF文件(3MP).
我正在查询MediaStore以检索相应的缩略图.如果我使用此sortOrder通过CursorLoader初始化Cursor:
MediaStore.Images.Media.DATE_ADDED + " DESC""
Run Code Online (Sandbox Code Playgroud)
会发生什么: MediaStore返回先前成功检索的缩略图:
预期的行为:当MediaStore由于某种原因无法检索给定图像的缩略图时,它必须返回NULL,根据其Javadoc:"...返回一个Bitmap实例.如果与origId关联的原始图像不是,则它可以为null存在或记忆不够."
如果我用这个sortOrder初始化Cursor:
MediaStore.Images.Media.DATE_ADDED + " ASC""
Run Code Online (Sandbox Code Playgroud)
它运行得很好:
但是我不能简单地改变sortOrder,因为要求是先显示最新的图片.
下面是我的示例代码,这里是完整的示例项目以及用于重现的三个图像.
package com.example.getimagefrommediastore;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.content.CursorLoader;
import android.widget.ImageView;
import android.widget.TextView;
public class GetThumbnailsFromMediaStoreSampleActivity extends Activity {
TextView mThumb_id_01;
TextView mThumb_id_02;
TextView mThumb_id_03;
ImageView mImg_01;
ImageView mImg_02;
ImageView mImg_03;
boolean isThumb01 = true; // Simple flag to control this example
boolean isThumb02 = true;
Cursor mCursorLoader;
int mColumnIndex;
long …Run Code Online (Sandbox Code Playgroud) 我如何使用按钮EditButton?
或者如何使用按钮从列表中激活编辑模式?
或者我如何从EditButton“编辑”/“完成”更改名称?
Xcode 8.0(8A218a)GM
目标:iOS 10(Swift 3)
请考虑以下代码:
let number = NSDecimalNumber(decimal: 22.4)
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current
let result = numberFormatter.string(from: number)
print(result!)
Run Code Online (Sandbox Code Playgroud)
结果是:
¤22.40
Run Code Online (Sandbox Code Playgroud)
(我不知道是什么¤意思.)
但是,如果我初始化语言环境,例如:
numberFormatter.locale = Locale(identifier: "en_US")
Run Code Online (Sandbox Code Playgroud)
结果将是:
$22.40
Run Code Online (Sandbox Code Playgroud)
......这首先是我所期待的.
请注意,这适用于Playground:
问题似乎只发生在通过Xcode启动的设备/模拟器上.
(我在两个不同的macOS上测试 - 在我的工作场所和家中.)
关于发生了什么的任何想法?
Mojave (macOS 10.14) 很棒。
Xcode 10.0 (10A254a) 很棒。
黑暗模式很棒。
不是很好,除非我遗漏了什么,是 iOS 模拟器窗口的丑陋灰色背景(全屏时):
关于如何改变这种颜色的任何想法?
假设我有以下内容ObservableObject:
import SwiftUI
class SomeObservable: ObservableObject {
@Published var information: String = ""
init() {
Timer.scheduledTimer(
timeInterval: 1.0,
target: self,
selector: #selector(updateInformation),
userInfo: nil,
repeats: true
).fire()
}
@objc func updateInformation() {
information = String("RANDOM_INFO".shuffled().prefix(5))
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个View,它观察到:
struct SomeView: View {
@ObservedObject var observable: SomeObservable
var body: some View {
Text(observable.information)
}
}
Run Code Online (Sandbox Code Playgroud)
以上将按预期工作。
该View重绘自己的时候ObservableObject变化:
How could I do the same (say calling a function) in a "pure" struct …
试图Swift 5根据大量其他类似问题在 .
我正在使用CommonCrypto+CCCrypt来加密/解密(AES、256 密钥、随机 iv)。
我倾向于NSData.bytes在withUnsafeBytes(这只是太混乱中Swift 5)。
我的encrypt功能是这样的:
func encrypt(_ string: String) throws -> Data {
guard let dataToEncrypt: Data = string.data(using: .utf8) else {
throw AESError.stringToDataFailed
}
// Seems like the easiest way to avoid the `withUnsafeBytes` mess is to use NSData.bytes.
let dataToEncryptNSData = NSData(data: dataToEncrypt)
let bufferSize: Int = ivSize + dataToEncryptNSData.length + kCCBlockSizeAES128
let buffer = UnsafeMutablePointer<NSData>.allocate(capacity: bufferSize)
defer …Run Code Online (Sandbox Code Playgroud) 我想在背景中有一个全屏图像。我已经实现了这个:
struct LoginView: View {
var body: some View {
VStack {
Spacer();
Text("Hallo");
Text("Hallo2");
Text("Hallo2");
Text("Hallo2");
Text("Hallo2");
Text("Hallo2");
Text("Hallo2");
Spacer();
}.background(Image("Background LaunchScreen")
.resizable()
.aspectRatio(UIImage(named: "Background LaunchScreen")!.size, contentMode: .fill)
.clipped())
.edgesIgnoringSafeArea(.all)
}
}
Run Code Online (Sandbox Code Playgroud)
当我移除垫片时,图像不再以全屏模式显示。
当然可以用不同的方式解决吗?
如果我将模拟器中的 iPhone 翻到一边,就会出现左右白色条纹。
我怎样才能改变这个?
swiftui ×3
ios ×2
swift ×2
aes ×1
android ×1
background ×1
button ×1
commoncrypto ×1
image ×1
ios10 ×1
ios14 ×1
java ×1
locale ×1
macos-mojave ×1
mediastore ×1
swift3 ×1
swift5 ×1
xcode ×1
xcode10 ×1