试图开始一些Swift工作.我在用
var imageData = UIImageJPEGRepresentation(image, compressionQuality:1.0)
Run Code Online (Sandbox Code Playgroud)
但是我在调用中得到了一个警告"无关的参数标签'compressionQuality'.我认为在Swift中,二级参数要么被标记要么被允许标记,但这不会让我使用它 - 如果我失败了由于这是一个系统函数,我不能使用#来要求它.但是我希望能够为尽可能多的参数命名以使代码对我自己更具可读性,我喜欢ObjC方法名称,像他们有时一样冗长.
有没有办法设置编译器标志以允许额外的参数标签?
是否有一种接受的方法或更新的方法可以更快地将图像加载到UIImageView中?
我的场景:具有大UIImageView的集合视图。一次仅显示1个单元格。我已经在集合视图上实现了NSCache和Prefetching。滚动性能会暂停一段时间。我正在使用的图像“相对”较大,以便适应iPad和iPhone的布局。例如,图像为1600x1600px,RGB,PNG。(压缩后的2-5MB,未压缩的约10MB,存储在应用程序本地)
加载图像后,通常可以来回滚动,视觉上约为60fps。但是在第一次加载时,它们总是令人不安的。但是,如果我缩小图像的尺寸,例如800x800,则它们会快速加载,并且滚动时看不到抖动。因此,我正在处理图像大小与绘制速度的问题。与iPhone X一样,在5s上出现相同的问题。
相同的性能影响发生在[UIImage imageNamed:imageName]或[UIImage imageWithContentsOfFile:imagePath]
我正在阅读如何在实际绘制UIImage图像之前对其进行解压缩,并且如果系统必须绘制二次采样的图像,那么它将严重影响主线程的性能。我已经进行了一些Instruments测试,并确认似乎我的代码实际上都不慢,PNG的图像绘制很慢。
是否有更新的方法来执行与以下链接中的内容类似的操作,即IE 在CGContext中绘制图像并希望它保持缓存状态?
https://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
- (void)decompressImage:(UIImage *)image
{
UIGraphicsBeginImageContext(CGSizeMake(1, 1));
[image drawAtPoint:CGPointZero];
UIGraphicsEndImageContext();
}
Run Code Online (Sandbox Code Playgroud)
https://gist.github.com/steipete/1144242
对我来说这似乎是真正的矫kill过正:https: //github.com/path/FastImageCache
我正在尝试了解是否可以使用自定义阿拉伯语和西里尔语字体,而无需switch/if-else对用户的语言设置进行操作。
我可以在应用程序中成功使用我的自定义字体。我想以同样的方式提供自定义 Ar/Cy 字体,并且我知道我可以将其构建到应用程序中。如果我有我的字体SpecialFont.otf并且还提供了SpecialFont-CY.otf当用户使用西里尔语言时操作系统如何知道使用 SpecialFontCY.otf?理想情况下,操作系统将了解用户的主要字体,并且能够选择与该语言匹配/包含正确字形的字体。
附言。这不是如何使用自定义字体的问题,我可以做到。我想知道如何为各种语言提供多种字体以完全支持世界,而无需编写如下代码:
if NSLocale.preferredLanguages.first == "Arabic"
let myFont = UIFont(name:"SpecialFont-AR", size: 17)
else if NSLocale.preferredLanguages.first == "Russian"
let myFont = UIFont(name:"SpecialFont-CY", size: 17)
...etc
Run Code Online (Sandbox Code Playgroud) 我已经成功地在Swift中创建了一个单例对象,但我觉得实现相当冗长.有没有办法缩短这个代码?并将多个格式化程序组合成一个类,每个格式化程序都是自己的单例格式?
import Foundation
class sharedNumberFormatterWithOneDecimalPlace : NSNumberFormatter {
class var sharedInstance: sharedNumberFormatterWithOneDecimalPlace {
struct Singleton {
static let instance = sharedNumberFormatterWithOneDecimalPlace()
}
return Singleton.instance
}
override init () {
super.init()
self.minimumIntegerDigits = 1
self.maximumFractionDigits = 1
self.minimumFractionDigits = 1
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Run Code Online (Sandbox Code Playgroud)
在我的其他课程中,我可以称之为:
NSNumberFormatter *formatter = sharedNumberFormatterWithOneDecimalPlace.sharedInstance;
NSLog(@"%@", [formatter stringFromNumber:aNumber]);
Run Code Online (Sandbox Code Playgroud)
我希望能够有一类"MultipleFormatters",我设置了许多格式化程序,可以在各处使用,然后调用像"MultipleFormatters.OneDecimalPlace"之类的东西.PS.我已经阅读过帖子:在Swift中使用dispatch_once单例模型
谢谢.