loading images from disk in iPhone app is slow

前端 未结 3 1873
别跟我提以往
别跟我提以往 2020-12-23 12:35

In my iPhone app, I am using the iPhone\'s camera to take a photo and save it do disk (the application\'s documents folder). This is how i save it:

[UIImageJ         


        
3条回答
  •  一个人的身影
    2020-12-23 13:41

    +imageWithContentsOfFile: is synchronous, so the UI on your main thread is being blocked by the image loading from disk operation and causing the choppiness. The solution is to use a method that loads the file asynchronously from disk. You could also do this in a background thread. This can be done easily by wrapping the +imageWithContentsOfFile: in dispatch_async(), then a nested dispatch_async() on the main queue that wraps -setBackgroundImage: since UIKit methods need to be run on the main thread. If you want the image to appear immediately after the view loads, you'll need to pre-cache the image from disk so it's in-memory immediately when the view appears.

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    
        UIImage *image = [UIImage imageWithContentsOfFile:frontPath];
    
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.frontButton setBackgroundImage:image forState:UIControlStateNormal];
        });
    
    });
    

    As an aside, if the button image happens a gradient, consider using the following properties to ensure the image file loaded from disk is tiny:

    - (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
    

    or (deprecated, only use if you need to support iOS 4.x):

    - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
    

提交回复
热议问题