注册 登录
主题 : 代码片段:不加载图片,实现世界地图的显示和旋转
级别: 新手上路
UID: 127835
精华: 0
发帖: 4
可可豆: 140 CB
威望: 40 点
在线时间: 5(时)
注册时间: 2012-03-05
最后登录: 2014-02-24
0 楼:  发表于: 2014-01-02 19:10    发自: Web Page

代码片段:不加载图片,实现世界地图的显示和旋转   

管理提醒: 本帖被 angellixf 执行加亮操作(2014-01-02)

- (void)viewDidLoad
{
    [super viewDidLoad];
    UInt8 *data=(UInt8 *)[[NSString stringWithFormat:@"𚜂𐜔🸁𝰁𐜃𐘕🸁𝘈𐐅𐔗🸁𝀗𐈝🸁𜤹🸁𜔿🸁𜅁🸁𜉀🸁𜉀🸁𜅀🸁𜁂🸁𛘃𐅆🸁𛙊🸁𛝉🸁𛱅🸁𛱆𛄁🸁𐡇𚸄🸁𐝇𚸅🸁𐠃𐤺𚸈𐈄🸁𐴸𚸈𐄅🸁𐼶𚌄𐈕🸁𐸴𙴣🸁𐼲𙰤🸁𐼲𙬥🸁𑀱𙬤🸁𑄱𙨥🸁𑈭𙸥🸁𑄪𙠾🸁𐄪𙠿🼬𘘃𐵀🸮𘌅𐭁𐸋𚬁𓰥𐈅𘄆𐍍𐤌𐈆𚈄𓰤𐌂𘉵𔘄𕔆𓰤𔴁𓝸𔀑𑸂𒰇𓬤𔠁𐌃𓕻𐔆𓈘𐌁𑌄𒰆𓬥𔔃𐄆𓒇𓄠𐸆𒰅𓬦𔈌𓊉𓀣𐔁𐐐𒘃𓬦𓼏𐄂𒶌𐐂𐨇𑠿𒐄𓨥𓼖𒖜𐐋𑕃𒀅𐄂𓘢𔄙𒎝𐈎𑉅𐰂𑀉𓘡𔄜𒂯𑅅𐬆𐜂𐌊𓘝𔔞𐠃𐘃𐎷𑁆𐈄𐌝𓔛𔜠𐛉𐽌𐄟𓌛𔠢𐋌𐽭𓀛𔣲𐹭𓀚𔣴𐵬𓄙𔣹𐝭𓈖𔨌𐏬𐕭𓐒𔰌𐓬𐙬𓐑𔰌𐗠𐔇𐡪𓔐𔬍𐗠𐘅𐩧𓠏𔨎𐓟𐨂𐩧𓠐𔨎𐏟𑑪𓤎𔠏𐓡𑉪𓨍𔠏𐓢𑅪𑤂𒄌𔜏𐗢𑅩𑘇𒄊𔜐𐛞𑐔𐅓𑘉𒈈𔔑𐟛𑜓𐈄𐉌𑜋𒀈𔔑𐟙𑨑𐈄𐑊𑠌𒀇𔔒𐛁𐌔𑰏𐌃𐝈𑤋𒐂𔘒𐛁𐠎𑼌𐐂𐽀𑤌𖰓𐖿𐨈𐌂𒄊𑜿𑤌𐘂𖔓𐚨𐈇𐈊𐤄𒼇𑜿𑜎𐐃𖔒𐞧𐜃𐐄𐰄𓌃𑤿𑘏𐈅𖐑𐢦𐼁𐸄𕔻𑘕𖐅𐈉𐦥𑼄𕘻𑘕𕌂𐼂𐐉𐦥𑸄𕜼𑔖𕄄𑔇𐮣𑴇𕜾𑌕𕄅𑄁𐌆𐚧𑴈𕝀𑄕𕄄𑄂𐌆𐚦𑸈𕡀𐼖𕄄𑀃𐌅𐞥𑸉𕥀𐸗𕄄𐼃𐌃𐦤𑼉𕩁𐄁𐤙𕀄𐼃𐐁𐪣𑼉𕭅𐘜𔨁𐌅𐼂𐺣𒄈𕭆𐐞𔠃𐐄𐸁𐺤𒀉𕱅𐐟𔘄𐐅𐴂𐢪𑼈𕵅𐐡𔌅𐐅𐶺𑨆𕹅𐐢𔈅𐐆𐮼𑤅𖁄𐐡𔌅𐌈𐛂𑜅𖅄𐐟𔐄𐌉𐗄𑘄𖍃𐌞𔘃𐐉𐓅𑘃𖑣𕀆𐓆𑜂𖕡𕈅𐋈𗹙𕿊𘍒𖇊𘑔𕳌𘍕𕫍𘍖𕫌𘑖𕟐𘍖𕟏𘑖𕧌𘕖𕩌𐅽𘙗𕤸𐄑𐕻𘙗𕨮𐈅𐐎𐡺𘙔&#*****4;𐔃𐌎𐥹𘝓𕼔𐄗𐔃𐌎𐝺𘡑𖄓𐌕𐜁𐔍𐙺𐠁𘁏𖌍𐄅𐐔𐸌𐙹𐠄𗹎𕤆𐐌𐔄𐌓𑀌𐕹𐠅𗵍𕤓𐤅𐐑𑄋𐙷𐤅𗵍𕤒𐬄𐘏𑈊𐙱𐐁𐨃𗽌𕨒𐬅𐘍𐠁𐬊𐙯𙉊𕴐𐴆𐔍𐔆𐜌𐝭𙉉𕸎𑄅𐐚𐈏𐝬𙍉𕴎𑌄𐐇𐈢𐙭𐼂𘉈𕸎𑐃𐐆𐐡𐕡𐈊𑀃𘉇𕸍𑘂𐔅𐐡𐙟𐌃𐄅𑄃𘉆𕼍𑜁𐘄𐔠𐙞𐤄𑄃𘍄𖀍𑸄𐔟𐝝𐨅𐼃𘑃𖄌𒀄𐐠𐙝𐨅𐼃𘕁𖌊𒄃𐔡𐕞𐈁𐜄𐸃𘙂𖐇𐤁𐘂𑄁𐜡𐑢𐜄𐰄𘝁𖘁𐠏𑪄𐠄𐬅𘝁𖴑𑨂𐌂𐉺𐤄𐤇𘡀𖘁𐐓𒍺𐤄𐤇𘤾𖘙𒍹𐨃𐜉𘬼𖜙𒑸𐬁𐤇𘸹𖜙𒑹𑜁𙌷𖜚𒑺𚨶𖘞𒉺𚬴𖘢𐨂𑍻𚨳𖜣𐠆𐽼𚨃𐄯𖜥𐘊𐩾𚨂𐈮𖜧𐎓𚸢𐘆𖞽𚼙𐐃𐨃𖝔𐉨𚼗𑌂𖙔𐑧𛀕𑐂𖕖𐍦𛄔𑔃𖍗𐑥𛈒𑘃𖉃𐈔𐍤𛐑𑜂𖅄𐌓𐑢𛔑𑜂𖁅𐌔𐑡𛘑𗝇𐌔𐥚𛠏𗡇𐐓𐩙𛠏𗡈𐌔𐔃𐔅𐍍𛤎𗝉𐐔𐌄𐹋𛬍𗝉𐐜𐹉𛴌𗙊𐔝𐵇𛸌𗙋𐐞𐵅𜀋𗕍𐌞𐹁𜌋𗕎𐈞𐸞𐈟𜔋𐰂𖝎𐌜𐼛𐔜𜠌𐨄𖙎𐌜𑀙𐜕𐐁𜤌𐨄𖙎𐌛𑐕𐤓𝀌𐠅𖙎𐐚𑐔𐨒𐘁𜬌𐘆𖙏𐐘𑔓𐰑𐔂𜰌𐌈𖙏𐔖𑜑𐴑𐔂𜴕𖝐𐐕𑠐𐼑𝔓𖝐𐐔𑤏𑀑𝜑𖝑𐐑𑬎𑄒𝤄𐄉𖝑𐔎𑴌𑌓𝼌𖉑𐔍𑼊𑠏𞀌𖁓𐌍𒀉𑤐𞀌𕽔𐈋𒈉𑨐𞀋𖁔𐄉𒔈𑨐𞌇𖅜𒜈𑬏𞔅𖅚𒤈𑬏𞘄𖅗𒰈𑬃𐄌𞘃𖉖𒴇𑬂𐌋𞜂𐼃𐄃𔵕𐠁𒐇𑬂𐐉𞠃𐰌𐐁𔙕𐐅𒐅𑰂𐔇𞤃𐬔𔑞𒐅𑴁𐘅𞰂𐨔𔕝𒐅𑴂🜃𐜗𔍝𒔃𑸂🠃𐐛𔉜𒘁𑼂🸝𔅛𔠁🼝𔅚𔠂🸢𓵘𔤂🸤𓰓𐐿𔨃𑔁𞜥𓰏𐠾𔨃𑐃𞘦𓰆𐄄𐬾𔬃𑈄𞘦𓴃𑌂𐄹𔰄𑀅𞘧𕘸𔜂𐌄𐼆𞔨𕜶𔠃𐈄𐸆𞔩𕜵𔤄𐄄𐴇𞔩𕜴𔬄𐈂𐰈𞐪𕜳𔴄𐸉𞐪𕘲𔼅𐨌𞌪𐄃𕌱𕀆𐠍𞌱𕀰𕈆𐠌𞈴𔸰𕌅𐠌𞈵𔴯𕔄𐠌𞌸𔨭𕘅𐠊𞐼𔜫𕠅𐜊𑴁𜔾𔜩𕤅𐠉𑰅𜈿𔜨𕨅𐤆𑰈𜁁𔔧𕬅𒨋𛹂𔔦𕰄𒨍𛵁𔔦𕴃𒰌𛵁𔔥𘴌𛵀𔔦𖀂𒬌𛴿𔔦𖀄𒤍𛰾𔘦𖄂𒬍𛰽𔘦𘸌𛴼𔜦𘼌𛰻𔤦𘼅𐌃𛴹𔨦𙠃𛰹𔨦𙤂𛴷𔬦🸁𕤶𔬧🸁𕨴𔬨🸁𕨴𔬨𐬂🸁𔸳𔨩𐨃𗜅𐤁𜠲𔨩𐠅𗔇𐤂𜠱𔨨𐜇𗐈𐠃𜨯𔨧𐜈𗐈𐠃𜬮𔨥𐤈𖸂𐌉𐠄𜬭𔬢𐬈𖴄𐈉𐠅𜬬𔰠𐰇𖴑𐜅𜬬𔰟𐴇𖴓𐔅𜬫𔴟𐴇𖰕𐌇𜨪𔼞𐰈𖬗𐈇𜨪𔼞𐰇𖬢𜤩𕄞𐬇𖨣𜤩𕄞𐬇𖤤𜤨𕈞𐬆𖤦𜠦𕐝𐴅𖜪𜔥𕘜𐼃𖔭𜔣𕠛𑄁𖔯𜐡𕨚𗜰𜔟𕰙𗘲𜐞𕴙𗘳𜌞𕸗𗘴𜈟𕼖𗔶𜄟𕼕𗘶𜄟𖀓𗠶𛼠𖀓𗠷𛼞𖄒𗠸𛼝𖌐𗤸𛸞𖌏𗬷𛸝𖐎𗰷𛸜𖔋𘀶𛸛𖠃𘘶𛸛🄶𛸚🈶𛴚🐵𛴙🔵𛴕🤵𛴕🤒𐜛𛴖🤎𐰙𛸗🠌𐼗𛼖🤋𑄖𛸗🨅𑨒𛸖🰂𑰒𛸒🸁𒀐𜀏🸁𒈐𜀏🸁𒌏𛼐🸁𒌏𛼏🸁𒐎𜀍🸁𒜍𒔁𙬌🸁𒠊𒜂𙨌🸁𒬁𐌂𒠄𙠋🸁𕨄𙠋🸁𕤅𙠋🸁𕨃𙠋🸁𕰂𙠊🸁𓄁𜔉🸁𓈄𒌂𙴉🸁𓈄𒌃𙬊🸁𓈄𒈃𙰋🸁𓈁𒐃𙰋🸁𕘃𙴋🸁𕐅𙴊🸁𕐅𙸉🸁𕐅𙼉🸁𕌅𚀈🸁𕐅𚀇🸁𕘃𚈆🸁🬆🸁🰅🸁🴄🸁🼃🸁🸄🸁🴄🸁🸃🸁𗐀"] UTF8String];
    originalData=malloc(2460);
    memset(originalData,0,2460);
    for(int i=0,j=0;i<2460;i+=2,j+=4){
        originalData[ i ] |=((data[j+1]&0xf)<<4);
        originalData[ i ] |=((data[j+2]&0x3c)>>2);
        originalData[i+1]|=((data[j+2]&0x3)<<6);
        originalData[i+1]|=((data[j+3]&0x3f));
    }
    for(int i=(map=malloc(512*276))?0:0,index=0,last=1;i<512*276;++i){
        map[ i ]=last;
        originalData[index]--;
        last=(originalData[index])?last:(!last);
        index+=(originalData[index]==0);
    }
    timeIndex=0;
    [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(show) userInfo:nil repeats:YES];
}
-(void)show
{
    for (UIView *view in self.view.subviews)
        [view removeFromSuperview];
    timeIndex+=(timeIndex>260)?(-timeIndex):2;
    UIGraphicsBeginImageContext((self.view.frame.size));
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextAddArc(context,160,240,150,0,3.1416*2,0);
    CGContextStrokePath(context);
    for(int x=0;x<300;++x)
        for(int y=240-sqrt(150.0*150.0-(150.0-x)*(150.0-x));y<239+sqrt(150.0*150.0-(150.0-x)*(150.0-x));++y){
            int x0=(y<102||y>=368)?0:(128.0*(x-(160-sqrt(150*150-(240-y)*(240-y))))/sqrt(150*150-(240-y)*(240-y))+21.333*timeIndex);
            int y0=(y<102||y>=368)?0:(y-102);
            if(!map[y0*512+x0])
                CGContextFillRect(context, CGRectMake(x+10,y,1,1));
        }
    CGContextStrokePath(context);
    [self.view addSubview:[[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()]];
}



还是两年前写过一点OC代码,看到这个活动花了一点时间写了一个小Demo,主要的亮点就是不加载图片显示一张完整的世界地图,把数据塞进一行之后勉勉强强把代码控制在了40行以内。为了体现Geek精神和控制代码行数,代码里面玩了许多花样,可读性是我写过的最差的没有之一。

稍微做一点解释,世界地图是从网上扒的一张512*276的图片,二值化处理后数据量变成512*276/8=17764字节。对该图片的比特流进行游程编码(RLE,简单来说就是统计连续0和1的个数)得到长度为2459字节的数组,然后玩一个小花招,借用UTF-8编码的四字节编码平面(U+010000~U+01FFFF)将数组进一步压缩成1230个字符,代码主要是从编码后的数据中解码,然后复原成二值化的图像数组并显示。这个过程没什么用,纯粹是折腾,图个乐子吧。
[ 此帖被blindpirate在2014-01-02 19:23重新编辑 ]

图片:earth.gif
附件: world.zip (37 K) 下载次数:8
级别: 新手上路
UID: 27736
精华: 0
发帖: 59
可可豆: 168 CB
威望: 108 点
在线时间: 76(时)
注册时间: 2010-08-16
最后登录: 2017-06-27
1 楼:  发表于: 2014-01-02 19:28    发自: Web Page
这个够GEEK!
级别: 精灵王

状态: 连续签到 - [341天]
UID: 4020
精华: 0
发帖: 437
可可豆: 24891 CB
威望: 25992 点
在线时间: 3388(时)
注册时间: 2009-04-02
最后登录: 2018-08-21
2 楼:  发表于: 2014-01-03 11:00    发自: Web Page
效果不错,支持!
一直在努力,一直都觉得努力得还不够~~
www.etware.com

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部