我正在寻找一种方法来重现 iOS 16 上的锁屏小部件上出现的“充满活力”的 iOS 16 效果,因为我的应用程序应该能够在用户创建过程中显示小部件的预览。
示例:请参阅下面中央屏幕上的 4 个圆形小部件。
以下是 Apple 文档中关于此效果的说明:
充满活力:对于锁定屏幕小部件,iOS 将文本、图像和仪表去饱和为单色,并通过为锁定屏幕背景适当地着色内容来创建充满活力的效果。人们还可以将锁定屏幕着色为彩色色调。 来自苹果文档
我不知道如何重现这种效果。尝试了该代码但不满意:
MyOriginalView()
.compositingGroup()
.saturation(0.0)
.blendMode(.plusLighter) // or .blendMode(.hardLight)
Run Code Online (Sandbox Code Playgroud)
以下是我想重现的对 iOS 16 充满活力的效果的更准确解释。
使用源视图和参数颜色,将源视图转换为灰度。白色像素似乎是使用参数颜色渲染的,而黑色像素则使用基于参数颜色的模糊透明深色。
请参阅下面的视图转换示例。
以下是一些用于创建测试图像并从此视图渲染 iOS 16 小部件的代码。这正是我想在我的应用程序中模仿的效果。
SwiftUI 4.0 代码(iOS16+):(我认为您需要为代码添加一个 Widget Target 来编译)
import SwiftUI
import WidgetKit
struct SourceView: View {
var body: some View {
VStack (spacing: 0) {
Color.black
HStack (spacing: 0) {
Color.black
Color.black.opacity(0.75)
Color.black.opacity(0.5)
Color.black.opacity(0.25)
Color.black.opacity(0.0)
}
HStack (spacing: 0) {
Color.red
Color.blue
Color.green
Color.yellow
Color.white
}
HStack (spacing: …Run Code Online (Sandbox Code Playgroud) 在Objective C中我使用了来自各种线程的NSMutableArray实例,并且我正在使用@synchronized来使其线程安全.目前我对这个数组的所有访问都受到@synchronized块的保护,甚至是objectAtIndex:方法.不过我想知道哪些方法确实需要用@synchronized保护.我需要保护读取权限吗?
如果'ObjectAtIndex'没有受到保护并且在'removeObject'的同时被调用会发生什么?
如果所有方法都受@synchronized保护,性能如何?(我正在写一个tcp/udp游戏服务器,如果它会降低性能或生成锁定,我真的不想过度保护这些数组).
例如,我想'containsObject:'方法将枚举以查找对象,并且我应该避免在另一个线程中对'removeObject:'进行concurent调用.
也许一个好的解决方案是拥有太多不同的锁(用于读写访问)......
欢迎提供帮助和建议!
非常感谢.
请在下面找到示例代码来说明:
@interface TestClass : NSObject
{
NSMutableArray * array;
}
@end
@implementation TestClass
- (id)init
{
self = [super init];
if (self)
{
array = [NSMutableArray array];
}
return self;
}
-(id)objectAtIndex:(NSUInteger)index
{
@synchronized(array) **// IS IT USEFUL OR NOT ??**
{
return [array objectAtIndex:index];
}
}
-(void)removeObject:(id)object
{
@synchronized(array)
{
[array removeObject:object];
}
}
-(void)compute
{
@synchronized(array)
{
for (id object in array)
{
[object compute];
}
}
}
@end
Run Code Online (Sandbox Code Playgroud) 我想将我的参考数据与我的核心数据模型中的用户数据分开,以简化我的应用程序的未来更新(因为,我计划将数据库存储在云上,并且不需要将参考数据存储在云上这是我申请的一部分).因此,我一直在寻找一种使用fetched属性编写跨店关系的方法.我还没有找到任何示例实现.
我有一个使用2种配置的Core Data模型:
数据模型配置1:UserData(相对于用户的实体)
数据模型配置2:ReferenceData(相对于应用程序本身的实体)
我为这两个配置设置了两个不同的SQLite持久存储.
UserData配置(和存储)包含实体"用户"
ReferenceData config(和store)包含实体"Type"和"Item".
我想创建两个单向弱关系,如下所示:
"用户"有一个独特的"类型"
"用户"有很多"项目"
这是我的问题:
如何设置我的属性?
每个关系是否需要2个属性(一个用于存储唯一ID,另一个用于访问我获取的结果)?
可以订购这种弱关系吗?
有人可以给我一个示例实现吗?
作为Marcus回答的后续内容:
通过论坛和文档,我读到我应该使用我的实体实例的URI表示而不是objectID.这背后的原因是什么?
// Get the URI of my object to reference
NSURL * uriObjectB [[myObjectB objectID] URIRepresentation];
Run Code Online (Sandbox Code Playgroud)
接下来,我想知道,如何将我的对象B URI(NSURL)存储在我的父对象A中作为弱关系?我应该使用什么属性类型?我该怎么转换呢?我听说过归档......?
然后,稍后我应该以相同的方式检索托管对象(通过非转换/取消归档URIRepresentation)并从URI获取对象
// Get the Object ID from the URI
NSManagedObjectID* idObjectB = [storeCoordinator managedObjectIDForURIRepresentation:[[myManagedObject objectID] URIRepresentation]];
// Get the Managed Object for the idOjectB ...
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,我要在我的实体A中声明两个属性,一个用于持久化URI需求,另一个用于检索direclty对象B?
NSURL * uriObjectB [objectA uriObjectB];
ObjectB * myObjectB = [objectA objectB];
Run Code Online (Sandbox Code Playgroud)
你可以阅读,我真的很想念一些简单的例子来实现弱关系!我真的很感激一些帮助.
ios ×2
core-data ×1
effect ×1
ios16 ×1
objective-c ×1
swiftui ×1
synchronized ×1
weak ×1
widget ×1