[ 登录注册 ]

ios

IPHONE GIF播放的方式

2016-08-11 11:18:50 admin 返回上一页

1.UIWebView 播放(无法控制周期)

.h

 @interface webViewController : UIViewController { 
    IBOutlet UIWebView *WebView; 
    IBOutlet UINavigationBar *Nav; 

@property (nonatomic, retain) IBOutlet UIWebView *WebView; 
@end 

.m

 - (void)viewDidLoad { 
    [super viewDidLoad]; 
    [WebView setOpaque:NO]; 
    [WebView setBackgroundColor:[UIColor clearColor]]; 
    Nav.topItem.title=@"Welcome"; 
    Nav.topItem.leftBarButtonItem=nil;   
    NSString* gifFileName = @"j_0002.gif"; 
    NSMutableString* htmlStr = [NSMutableString string]; 
    [htmlStr appendString:@"Hello Honey"]; 
    [htmlStr appendString:@"<p><img src=\""]; 
    [htmlStr appendFormat:@"%@",gifFileName]; 
    [htmlStr appendString:@"\" alt=\"picture\"/>"]; 
    [WebView loadHTMLString:htmlStr baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]]; 
} www.2cto.com

2.glgif提供的开源代码实现(目前无法控制周期,需要自己再研究)


3.使用UIView的animation接口实现(GIF需要整理出每张图片)

动画可以用UIImageView,把动画的每一帧做成图片,转换成UIImage保存在animationImages数组中,调用- (void)startAnimating;就能看到动画


4.把GIF的通过GIF的格式转换成每张图片,通过UIView的animation的接口实现(GIF的格式貌似还是有问题,有部分图片的背景有问题)

view plain
- (NSMutableArray*)getImgArrayByName:(NSString*)name 

    //happybaby20 
    NSURL *threeUrl =[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"crad"  
                                                                            ofType:@"gif"]]; 
    NSData* data = [[NSData alloc]initWithContentsOfURL:threeUrl]; 
    NSMutableArray* array = nil; 
//  long word = ::SizeofResource(handle,hrsrc); 
//  char* lpBy = (char*)LoadResource(handle,hrsrc); 
    DWORD word = data.length; 
    BYTE* lpBy = (BYTE*)data.bytes; 
    //每张图保存的指针 需要释放 
    BYTE* pByte[100] = {0}; 
    //每张图的大小 
    DWORD nu[100] = {0}; 
    //图片数量 
    int num = 0; 
    DWORD firstLocation = 0; 
    for(DWORD j=0;j<word;j++) 
    { 
        if(lpBy[j]==0x2c) 
        { 
            if(lpBy[j-1]==0x00) 
            {                
                if(num==0) 
                { 
                    firstLocation = j; 
                } 
                 
                if (num== 10) 
                { 
                    int sdf=nu[num]; 
                    int sdfadf=0; 
                } 
                 
                PGifImage nowImage = (PGifImage)&lpBy[j+1]; 
                 
                if(nowImage->Flag.a==0) 
                { 
                    DWORD number = 1+sizeof(GifImage); 
                    while(lpBy[j+number]!=0) 
                    { 
                        number = number+(DWORD)lpBy[j+number]+1; 
                    } 
                    number++; 
                    pByte[num] = new BYTE[number]; 
                    memset(pByte[num],0,number); 
                    for(DWORD n=0;n<number;n++) 
                    { 
                        *(BYTE*)(pByte[num]+n) = lpBy[j+n]; 
                    } 
                    nu[num] = number; 
                    j = j+number-1; 
                    num++; 
                } 
                else 
                { 
                    //int number = 1+ sizeof(GifImage) + 3*(int)floor(pow(2.0f,nowImage->Flag.d)); 
                     
                    DWORD number = 1+sizeof(GifImage)+1+3*(int)floor(pow(2.0f,nowImage->Flag.d)); 
                    while(lpBy[j+number] != 0) 
                    { 
                        number = number+lpBy[j+number]; 
                    } 
                    pByte[num] = new BYTE[number]; 
                    memset(pByte[num],0,number); 
                    for(int n=0;n<number;n++) 
                    { 
                        *(BYTE*)(pByte[num]+n) = lpBy[j+n]; 
                    } 
                    nu[num] = number; 
                    j = j+number-1; 
                    num++; 
                } 
                 
 
            } 
        } 
    } 
 
    NSArray *userPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDirectory = [userPaths objectAtIndex:0]; 
     
    //数量上 
    if (num>0) 
    { 
        array = [[NSMutableArray alloc] initWithCapacity:num]; 
    } 
    for (int k=0; k<num; k++) 
    { 
        for(DWORD n=0;n<nu[k];n++) 
        { 
            lpBy[firstLocation+n] = *(BYTE*)(pByte[k]+n); 
        } 
         
        NSData* imgbuf = [[NSData alloc] initWithBytes:lpBy length:nu[k] + firstLocation]; 
 
        if (imgbuf) 
        { 
 
            UIImage* img = [[UIImage alloc]initWithData:imgbuf]; 
             
            NSData* imgdd = UIImagePNGRepresentation(img); 
             
            [imgdd writeToFile:[NSString stringWithFormat:@"%@/sdf%d.png",documentDirectory,k] atomically:NO]; 
             
            if (img) 
            { 
                [array addObject:img]; 
            } 
             
            [img release]; 
        } 
        [imgbuf release]; 
         
        delete pByte[k]; 
        pByte[k] = NULL; 
    } 
 
    return array; 

摘自:zltianhen的专栏

点击复制链接 与好友分享!回本站首页

文章来源:http://www.bozhiyue.com/ios/2016/0811/364063.html
返回上一页    返回分类 上一篇:   下一篇:
相关