Comments (4)
首先得到当前主题应该设置的占位图片名:
- 通过索引
// ThemeManager.currentThemeIndex 可以获得当前主题的索引
NSString *imageName = ThemeManager.currentThemeIndex == 0 ? @"first_image" : @"second_image";
- 通过plist
// stringForKeyPath可以直接获得keyPath中的值
NSString *imageName = [ThemeManager stringForKeyPath:@"YourImageNameKeyPath"];
然后设置图片:
[self.avatar sd_setBackgroundImageWithURL:[NSURL URLWithString:self.avatar]
forState:UIControlStateNormal
placeholderImage:[UIImage imageWithName:imageName]];
上面的方法有一个缺陷,当avatar正显示占位图时切换主题,此时占位图并不会随主题改变,如果这种情况比较明显,可以注册通知ThemeUpdateNotification,触发时重新调用一次上面的步骤设置avatar
from swifttheme.
其实我是想让placeholderImage也用上ThemeImagePicker
,后来想了一个不是很优雅的方法
- (void)theme_setBackgroundImageWithURL:(NSURL *)url
forState:(UIControlState)state
placeholderImageName:(NSString *)imageKeyPath {
[self theme_setBackgroundImage:[ThemeImagePicker pickerWithKeyPath:imageKeyPath] forState:state];
NSString *imageName = [ThemeManager stringForKeyPath:imageKeyPath];
@weakify(self);
[self sd_setBackgroundImageWithURL:[self thumbnailImageURL:url]
forState:UIControlStateNormal
placeholderImage:[UIImage imageWithName:imageName]
completed:
^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
@strongify(self);
if (!error) {
NSMutableDictionary *dict = [self.themePickers mutableCopy];
[dict setValue:nil forKey:@"setBackgroundImage:forState:"];
self.themePickers = [dict copy];
}
}];
}
from swifttheme.
这个方法看上去是可行的,可以改进的是:
NSString *imageName = [ThemeManager stringForKeyPath:imageKeyPath];
[UIImage imageWithName:imageName];
// 可以替换为:
[ThemeManager imageForKeyPath:imageKeyPath];
NSMutableDictionary *dict = [self.themePickers mutableCopy];
[dict setValue:nil forKey:@"setBackgroundImage:forState:"];
self.themePickers = [dict copy];
// 可以替换为:
[self theme_setBackgroundImage:nil forState:UIControlStateNormal]; // 现在类型不支持,我改一下
然后你可以这样写:
[self theme_setBackgroundImage:[ThemeImagePicker pickerWithKeyPath:imageKeyPath] forState:state];
@weakify(self);
[self sd_setBackgroundImageWithURL:[self thumbnailImageURL:url]
forState:state
placeholderImage:[ThemeManager imageForKeyPath:imageKeyPath]
completed:
^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
@strongify(self);
if (!error) {
[self theme_setBackgroundImage:nil forState:UIControlStateNormal];
}
}];
现在已经支持这样写(需要更新一下SwiftTheme,版本0.2.1):
[self theme_setBackgroundImage:nil forState:UIControlStateNormal];
from swifttheme.
赞
from swifttheme.
Related Issues (20)
- plist文件中,主题颜色怎么设置alpha HOT 1
- The iOS Simulator deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.4.99. HOT 1
- UITabBarItem theme_setTitleTextAttributes crash HOT 3
- tabBar.theme_barTintColor fades tabBar border HOT 6
- swift 5,创建一个新控制器,导航栏右边的文字颜色没改变,还有tabbar会跳动,什么原因呢?
- SwiftUI support HOT 1
- oc 如何设置渐变 theme_colors HOT 2
- navigation controller and tabbar color is not correct on iOS 15 HOT 5
- 如何在OC中通过theme获取Color呢 HOT 9
- change theme with circular animation HOT 3
- theme_border color HOT 2
- Error compilation via Carthage HOT 2
- Issues with UILabel and UIView with shadow (Swift)
- 如何设置颜色的透明度? HOT 1
- Questions regarding @objc usage + Multiplatform Swift support. HOT 3
- 当key path 找不到对应的value的时候,picker应该弄个默认值输入 HOT 1
- 在同一个项目中,可以拥有2个以上的 ThemeManager 吗?
- 如何获取ThemePicker对应的值?ThemePicker.value() 为Optional<Any> HOT 3
- 想给label设置富文本的主题,如何配置plist
- 透明颜色设置还是有问题 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swifttheme.