• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長修遠,我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
            數據加載中……

            IOS GIF播放, 包含UITableViewCell中正常播放


            本程序依賴第三方庫UIImage+animatedImageWithGIF, 但是有小幅度修改
             1 //
             2 //  UIImage+animatedImageWithGIF.h
             3 //
             4 //  Created by YuAo on 2/24/12.
             5 //  Copyright (c) 2012 eico design. All rights reserved.
             6 //
             7 //  Note: 
             8 //        ImageIO.framework is needed.
             9 //        This lib is only available on iOS 4+
            10 
            11 #import <Foundation/Foundation.h>
            12 
            13 @interface UIImageView(animatedImageViewWithGIF)
            14 + (UIImageView *)imageViewWithGIFData:(NSData *)data;
            15 //+ (UIImageView *)imageViewWithGIFURL:(NSURL *)url;
            16 @end
             


             1 //
             2 //  UIImage+animatedImageWithGIF.m
             3 //
             4 //  Created by YuAo on 2/24/12.
             5 //  Copyright (c) 2012 eico design. All rights reserved.
             6 //
             7 
             8 #import "UIImageView+imageViewWithGIF.h"
             9 #import <ImageIO/ImageIO.h>
            10 
            11 #if __has_feature(objc_arc)
            12     #define toCF (__bridge CFTypeRef)
            13     #define ARCCompatibleAutorelease(object) object
            14 #else
            15     #define toCF (CFTypeRef)
            16     #define ARCCompatibleAutorelease(object) [object autorelease]
            17 #endif
            18 
            19 @implementation UIImageView(animatedImageViewWithGIF)
            20 
            21 + (UIImageView *)imageViewWithAnimatedGIFImageSource:(CGImageSourceRef) source 
            22                                          andDuration:(NSTimeInterval) duration {
            23     if (!source) return nil;
            24     size_t count = CGImageSourceGetCount(source);
            25     NSMutableArray *images = [NSMutableArray arrayWithCapacity:count];
            26 
            27     for (size_t i = 0; i < count; ++i) {
            28         CGImageRef cgImage = CGImageSourceCreateImageAtIndex(source, i, NULL);
            29         if (!cgImage)
            30             return nil;
            31         [images addObject:[UIImage imageWithCGImage:cgImage]];
            32         CGImageRelease(cgImage);
            33     }
            34     UIImageView *imageView = [[UIImageView alloc] init];
            35     if ([images count] > 0) {
            36         imageView.image = [images objectAtIndex:0];
            37     }
            38     [imageView setAnimationImages:images];
            39     [imageView setHighlighted:NO];
            40 //    [imageView setHighlightedAnimationImages:images];
            41     [imageView setAnimationDuration:duration];
            42     [imageView sizeToFit];
            43     NSArray *arr = [NSArray arrayWithObject:NSRunLoopCommonModes]; //優先級提升. 可以解決tableview滾動時動畫暫停的問題
            44     [imageView performSelector:@selector(startAnimating) withObject:nil afterDelay:0.1f inModes:arr];
            45 //    NSLog(@"begin");
            46     return ARCCompatibleAutorelease(imageView);
            47 }
            48 
            49 + (NSTimeInterval)durationForGifData:(NSData *)data {
            50     char graphicControlExtensionStartBytes[] = {0x21,0xF9,0x04};
            51     double duration=0;
            52     NSRange dataSearchLeftRange = NSMakeRange(0, data.length);
            53     while(YES){
            54         NSRange frameDescriptorRange = [data rangeOfData:[NSData dataWithBytes:graphicControlExtensionStartBytes 
            55                                                                         length:3] 
            56                                                  options:NSDataSearchBackwards
            57                                                    range:dataSearchLeftRange];
            58         if(frameDescriptorRange.location != NSNotFound){
            59             NSData *durationData = [data subdataWithRange:NSMakeRange(frameDescriptorRange.location+4, 2)];
            60             unsigned char buffer[2];
            61             [durationData getBytes:buffer];
            62             double delay = (buffer[0] | buffer[1] << 8);
            63             duration += delay;
            64             dataSearchLeftRange = NSMakeRange(0, frameDescriptorRange.location);
            65         }else{
            66             break;
            67         }
            68     }
            69     return duration/100;
            70 }
            71 
            72 + (UIImageView *)imageViewWithGIFData:(NSData *)data{
            73     NSTimeInterval duration = [self durationForGifData:data];
            74     CGImageSourceRef source = CGImageSourceCreateWithData(toCF data, NULL);
            75     UIImageView *imageView = [UIImageView imageViewWithAnimatedGIFImageSource:source andDuration:duration]; 
            76     CFRelease(source);
            77     return imageView;
            78 }
            79 
            80 //+ (UIImageView *)imageViewWithGIFURL:(NSURL *)url{
            81 //    NSData *data = [NSData dataWithContentsOfURL:url];
            82 //    return [UIImageView imageViewWithGIFData:data];
            83 //}
            84 
            85 @end
            86 

             1 //
             2 //  testViewController.h
             3 //  UIImageViewGIF
             4 //
             5 //  Created by khan.lau on 13-2-26.
             6 //
             7 //
             8 
             9 #import <UIKit/UIKit.h>
            10 
            11 @interface testViewController : UITableViewController
            12 
            13 @end


              1 //  在UITableview中顯示的范例
              2 //  testViewController.m
              3 //  UIImageViewGIF
              4 //
              5 //  Created by khan.lau on 13-2-26.
              6 //
              7 //
              8 
              9 #import "testViewController.h"
             10 #import "UIImageView+imageViewWithGIF.h"
             11 
             12 @interface testViewController ()
             13 
             14 @end
             15 
             16 @implementation testViewController
             17 
             18 - (id)initWithStyle:(UITableViewStyle)style
             19 {
             20     self = [super initWithStyle:style];
             21     if (self) {
             22         // Custom initialization
             23     }
             24     return self;
             25 }
             26 
             27 - (void)viewDidLoad
             28 {
             29     [super viewDidLoad];
             30     UIBarButtonItem *exitBtn = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleBordered target:self action:@selector(doExit:)]  ;
             31     self.navigationItem.leftBarButtonItem = exitBtn;
             32     // Uncomment the following line to preserve selection between presentations.
             33     // self.clearsSelectionOnViewWillAppear = NO;
             34  
             35     // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
             36     // self.navigationItem.rightBarButtonItem = self.editButtonItem;
             37     
             38 }
             39 - (void)reStartAnimating{
             40     NSArray *vc = [self.tableView visibleCells];
             41     for (UITableViewCell *cell in vc) {
             42 //        NSLog(@"%d", [cell isSelected]);
             43 //        if ([cell isSelected] == NO) {
             44 //            continue;
             45 //        }
             46         for (UIView *v in [cell.contentView subviews]) {
             47             if ([v isKindOfClass:[UIImageView class]]){
             48                 UIImageView * imageview = (UIImageView *)v;
             49                 if ([imageview isAnimating] == NO) {
             50                     [imageview startAnimating];
             51                 }
             52             }
             53         }
             54     }
             55 }
             56 
             57 - (void)didReceiveMemoryWarning
             58 {
             59     [super didReceiveMemoryWarning];
             60     // Dispose of any resources that can be recreated.
             61 }
             62 -(void)doExit:(id)sender{
             63     [self.parentViewController dismissViewControllerAnimated:YES completion:^{}];
             64     //    [self.parentViewController dismissModalViewControllerAnimated:YES];
             65 }
             66 #pragma mark - Table view data source
             67 
             68 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
             69 {
             70     // Return the number of sections.
             71     return 1;
             72 }
             73 
             74 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
             75 {
             76     // Return the number of rows in the section.
             77     return 8;
             78 }
             79 
             80 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
             81 {
             82     static NSString *CellIdentifier = @"Cell";
             83     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
             84     if (cell == nil) {
             85         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
             86     }
             87 
             88     for (UIView *v in [cell.contentView subviews]) {
             89         if ([v isKindOfClass:[UIView class]]){
             90             [v removeFromSuperview];
             91         }
             92     }
             93     if ([indexPath row] == 0) {
             94 //        NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
             95 //                                                          pathForResource:@"demo"
             96 //                                                          ofType:@"gif"]];
             97         UIImageView *imageView = [[UIImageView alloc] init];
             98         imageView.image = [UIImage imageNamed:@"IMG_0015.jpg"];
             99         imageView.frame = CGRectMake(0, 0, 100, 100);
            100         [cell.contentView addSubview:imageView];
            101     }else if ( [indexPath row] == 1){
            102         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            103                                                           pathForResource:@"bbb"
            104                                                           ofType:@"gif"]];
            105         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            106         imageView.frame = CGRectMake(0, 0, 100, 100);
            107         [cell.contentView addSubview:imageView];
            108     }else if ( [indexPath row] == 2){
            109         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            110                                                           pathForResource:@"demo"
            111                                                           ofType:@"gif"]];
            112         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            113         imageView.frame = CGRectMake(0, 0, 100, 100);
            114         [cell.contentView addSubview:imageView];
            115     }else if ( [indexPath row] == 3){
            116         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            117                                                           pathForResource:@"bbb"
            118                                                           ofType:@"gif"]];
            119         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            120         imageView.frame = CGRectMake(0, 0, 100, 100);
            121         [cell.contentView addSubview:imageView];
            122     }else if ( [indexPath row] == 4){
            123         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            124                                                           pathForResource:@"demo"
            125                                                           ofType:@"gif"]];
            126         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            127         imageView.frame = CGRectMake(0, 0, 100, 100);
            128         [cell.contentView addSubview:imageView];
            129     }else if ( [indexPath row] == 5){
            130         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            131                                                           pathForResource:@"bbb"
            132                                                           ofType:@"gif"]];
            133         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            134         imageView.frame = CGRectMake(0, 0, 100, 100);
            135         [cell.contentView addSubview:imageView];
            136     }else if ( [indexPath row] == 6){
            137         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            138                                                           pathForResource:@"demo"
            139                                                           ofType:@"gif"]];
            140         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            141         imageView.frame = CGRectMake(0, 0, 100, 100);
            142         [cell.contentView addSubview:imageView];
            143     }else if ( [indexPath row] == 7){
            144         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            145                                                           pathForResource:@"bbb"
            146                                                           ofType:@"gif"]];
            147         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            148         imageView.frame = CGRectMake(0, 0, 100, 100);
            149         [cell.contentView addSubview:imageView];
            150     }else{
            151         NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            152                                                           pathForResource:@"bbb"
            153                                                           ofType:@"gif"]];
            154         UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            155         imageView.frame = CGRectMake(0, 0, 100, 100);
            156         [cell.contentView addSubview:imageView];
            157     }
            158     
            159 
            160 //    [self performSelector:@selector(reStartAnimating) withObject:nil afterDelay:0.3f];
            161     return cell;
            162 }
            163 //行高度
            164 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
            165     if ([indexPath section]==0) {
            166         return 115;
            167     } else
            168         return 50;
            169 }
            170 
            171 //判斷選中的行
            172 -(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
            173 //    [self reStartAnimating];
            174     return indexPath;
            175 }
            176 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
            177     [self performSelector:@selector(reStartAnimating) withObject:nil afterDelay:0.3f];
            178 //    [tableView deselectRowAtIndexPath:indexPath animated:YES];//選中后的反顯顏色即刻消失
            179 }
            180 
            181 
            182 - (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
            183 //    [self reStartAnimating];
            184     return indexPath;
            185 }
            186 // Called after the user changes the selection.
            187 - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
            188     [self performSelector:@selector(reStartAnimating) withObject:nil afterDelay:0.3f];
            189 }
            190 
            191 
            192 
            193 @end
            194 

             1 //  主界面入口.... 包含在正常的UIViewController中顯示gif
             2 //  DemoViewController.m
             3 //  UIImageViewGIF
             4 //
             5 //  Created by YuAo on 2/27/12.
             6 //  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
             7 //
             8 
             9 #import "DemoViewController.h"
            10 #import "UIImageView+imageViewWithGIF.h"
            11 #import "testViewController.h"
            12 
            13 @implementation DemoViewController
            14 
            15 - (void)loadView {
            16     UIView *mainView = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
            17     mainView.backgroundColor = [UIColor whiteColor];
            18     
            19     NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] 
            20                                      pathForResource:@"demo"
            21                                               ofType:@"gif"]];
            22     UIImageView *imageView = [UIImageView imageViewWithGIFData:gifData];
            23     imageView.frame = CGRectMake(90, 100, 100, 100);
            24     [mainView addSubview:imageView];
            25     
            26     NSData *gifData1 = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]
            27                                                       pathForResource:@"bbb"
            28                                                       ofType:@"gif"]];
            29     UIImageView *imageView1 = [UIImageView imageViewWithGIFData:gifData1];
            30     imageView1.frame = CGRectMake(90, 0, 100, 100);
            31     [mainView addSubview:imageView1];
            32     self.view = mainView;
            33     
            34     UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            35     button.frame = CGRectMake(10, 10, 70, 40);
            36     [button setTitle:@"表格測試" forState:UIControlStateNormal];
            37     [button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
            38     [mainView addSubview:button];
            39 }
            40 
            41 -(IBAction) click:(UIButton*) sender{
            42     testViewController * detail = [[testViewController alloc] init];
            43     detail.hidesBottomBarWhenPushed = YES;
            44     
            45     detail.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
            46     UINavigationController *vd = [[UINavigationController alloc] initWithRootViewController:detail];
            47     [vd.navigationBar.topItem setTitle: @"用戶注冊"];
            48     [self presentViewController:vd animated:YES completion:^{}];
            49 }
            50 @end

            重點需要注意TableViewCell選中狀態會對動畫播放造成影響, 因此我將動畫播放延時0.3s執行 避開事件沖突



            posted on 2013-02-27 02:40 Khan 閱讀(2713) 評論(0)  編輯 收藏 引用 所屬分類: GCC/G++跨平臺開發

            久久国产精品99国产精| 久久综合九色欧美综合狠狠| 久久国产精品偷99| 久久精品这里热有精品| 久久久久久亚洲精品成人 | a级毛片无码兔费真人久久| 久久久久AV综合网成人| 久久人人爽爽爽人久久久| 久久永久免费人妻精品下载| 一本一本久久a久久综合精品蜜桃| 合区精品久久久中文字幕一区| 亚洲国产精品无码久久九九| 亚洲国产综合久久天堂| 狠狠色狠狠色综合久久| 久久精品国产久精国产思思| 精品国产一区二区三区久久久狼 | 国产国产成人久久精品 | 久久综合日本熟妇| 亚洲人成无码www久久久| 久久九九兔免费精品6| 久久综合给合久久狠狠狠97色69| 国产精品美女久久久久久2018| 久久夜色精品国产亚洲| 久久99精品国产麻豆婷婷| 性做久久久久久久久久久| 亚洲va久久久噜噜噜久久狠狠| 波多野结衣中文字幕久久| 国产亚洲美女精品久久久| 蜜桃麻豆WWW久久囤产精品| 国内精品久久久久久99蜜桃| 精品国产91久久久久久久a| 久久久久99这里有精品10| 国产人久久人人人人爽| 久久精品国产国产精品四凭| 久久久久亚洲精品日久生情| 久久中文娱乐网| 亚洲va中文字幕无码久久| 国产精品久久久99| 国产亚洲精久久久久久无码| 四虎久久影院| 国产精品99久久不卡|