Code Monkey home page Code Monkey logo

Comments (4)

wxxsw avatar wxxsw commented on July 30, 2024

首先得到当前主题应该设置的占位图片名:

  • 通过索引
// 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.

zhao0 avatar zhao0 commented on July 30, 2024

其实我是想让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.

wxxsw avatar wxxsw commented on July 30, 2024

这个方法看上去是可行的,可以改进的是:

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.

zhao0 avatar zhao0 commented on July 30, 2024

from swifttheme.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.