2013-07-31 104 views
1

我在渲染具有自定义外观设置的滑块的视图控制器的图像时出现问题。图像呈现很好,但是,图像中的滑块仅具有默认外观。如果我去那个viewcontroller(vc2),uiappearance被设置为自定义外观。任何想法如何使用自定义滑块外观呈现图像?用UIAppearance渲染图像

我在第一个视图控制器上有一个UIImageView。在第二个视图控制器上,我有一个滑块。

ViewController.m

ViewController *vc2 = [[ViewController alloc]init]; 
vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"]; 
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,NO,0.0); 
[vc2.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
[_image setImage:viewImage]; 

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions 
    { 
    [self customizeAppearance]; 
    // Override point for customization after application launch. 
    return YES; 
    } 
    - (void) customizeAppearance; { 
    UIImage *minImage = [[UIImage imageNamed:@"slider_minimum.png"] 
         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 0)]; 
    UIImage *maxImage = [[UIImage imageNamed:@"slider_maximum.png"] 
         resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 13)]; 
    UIImage *thumbImage = [UIImage imageNamed:@"slider_thumb.png"]; 

    [[UISlider appearance] setMaximumTrackImage:maxImage 
             forState:UIControlStateNormal]; 
    [[UISlider appearance] setMinimumTrackImage:minImage 
             forState:UIControlStateNormal]; 
    [[UISlider appearance] setThumbImage:thumbImage 
           forState:UIControlStateNormal]; 
    [[UISlider appearance] setThumbImage:thumbImage 
           forState:UIControlStateHighlighted]; 

    } 
+0

这可能与您在获取图像之前未显示视图控制器的视图有关。尝试推动并拍摄图像,然后立即解散。 – Greg

+0

@PartiallyFinite:即使我将其更改为[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];和第一个视图控制器的滑块,它仍然会使用默认滑块。奇怪的权利? –

+1

根据[这个答案](http://stackoverflow.com/a/13322872/834998),'UIAppearance'自定义只在layoutSubviews在视图上被调用之前应用,所以它们可能没有被应用于你得到快照的时间。 – Greg

回答

0

感谢@PartiallyFinite方向,我想通了,我需要做的视图控制器内的下列:

UIImage *minImage = [UIImage imageNamed:@"slider_minimum.png"]; 
UIImage *maxImage = [UIImage imageNamed:@"slider_maximum.png"]; 
UIImage *tumbImage= [UIImage imageNamed:@"slider_thumb.png"]; 

minImage = [minImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 3, 0, 0)]; 
maxImage = [maxImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 13)]; 

[_slider setMinimumTrackImage:minImage forState:UIControlStateNormal]; 
[_slider setMaximumTrackImage:maxImage forState:UIControlStateNormal]; 
[_slider setThumbImage:tumbImage forState:UIControlStateNormal];