这次生日正好碰上端午

于是大家都放假了,正好可以聚会/
话说这次WWDC也是在咱生日前,于是本来是安排了9号到11号3天都有聚会的,而且11号的是通宵到12号也就是咱生日的那天。
计划自然跟不上变化,9号的时候其实变成了和女生单独出去约会一下午和晚上…因为其他人神助攻都不参与。
跑去预定了自制蛋糕,还跑去超市逛了两趟,最后又跑去广西大学吃夜宵。
不过当天晚上下大暴雨…于是被困在商场里…后来不仅商场停电(似乎只是灯的线路坏了),连咱自带的雨伞都坏了233。还好商场内有超市…(话说一片黑的超市还真的是第一次去..虽然里面冷柜以及电梯什么的都运转正常。
之后又跑到广西大学里面的某条美食街去吃东西。结果出来的时候又下大雨,被困在了外面的美食街里(话说广西大学附近也太多东西吃了吧?!似乎比中山路还多东西!)。直到11点才得回去…当然是走路送她回去咱再回去啦~
咱那天晚上还是很happy的说~虽然到最后回到家基本上都湿完了,还有因为走太多所以回到家腿都快要断了…右脚伸缩的时候膝盖旁边的筋都能感觉到超疼的。
 
然后原定10号聚的,结果最后又变成了11号一起聚,理由是:叫不到人…
不过10号咱又去当好人了~嘛…话说咱对这种还真像是本职工作一样呢~
然后晚上是WWDC,这个等下再吐槽。
 
第二天也就是11号,上午刷iOS7以及装10.9…结果iOS 7安装比想象中的耗费时间,直到下午3点半才装好,然后急急忙忙的赶去聚会集合地点..
然后本来说好是自制蛋糕的,结果变成了拜托店家制作了…本来还想吃到人家亲手制作的蛋糕先=3=
嘛~话说果然来的每位都是和咱要求的一样:不自带礼物…说实话礼物这种…单纯心意还好,但是演变成礼尚往来的话就非常讨厌了。所以咱对于这种基本都是要求人来了就可以。
然后下午则是去玩桌游,不过说起来咱不会牌又不会麻将什么的,真心感觉自己没用Orz、
晚餐是吃火锅,嘛…以前也是和其中一位经常来吃..所以…….应该说习惯了的。
之后则是直接去KTV,还好吃饭前特意去预定了,本来以为有0点到第二天的,结果只有9点到第二天5点的,于是直接推掉吃饭后的计划吃完之后直接去唱K了~
不过说是去唱K…其实大多还是去听歌…因为咱们大半都是不怎么唱歌的,也没有麦霸之类的人在。于是点了几首比如Only my railgun之类的大家跟着唱就是了。
话说:1.日语歌曲好少(试了好几种方法才翻出所有日文歌曲)…2.日语歌曲好多都是高音的(因为女性唱的比较多?),没有一首歌曲是能完整唱下来的。

然后虽然是有生日优惠但是咱是提前一天去开的厢所以不能享受,不过因为有带蛋糕去KTV,所以他们赠送了一份长寿面…不过放置play了几个小时凉完了才吃233…完全变成凉拌了..而且一点味道都木有T_T..
蛋糕的照片没拍于是就不传上来了。外形就是哆啦A梦…字是竖着写在蛋糕外面那一圈的。
话说刚吃完蛋糕..结果就开始和公司那边“吵架”…以及家里各种不停打电话…弄得心情超差…最后演变成这样一幅画面:
一位在咱左边猛的唱歌,剩下的在右边玩扑克,咱在中间边流泪边猛的给自己灌酒…
不过到最后还是撑不住直接躺下了…结果没躺多久….直接冲厕所去猛吐…然后走路都不能保持平衡了(即便意识还是很清醒的,但是头超痛),这就是半醉的感觉么?
嘛…开始吐了之后就没再继续喝酒,不过躺着躺着就那么混到了早上5点…后来虽然咱是想自行走路回去的,不过还是被同学用出租车送到了小区门口(话说半夜的城市感觉很不错的说~)。
然后回家发现家门果然反锁了233..按门铃也没反应,只好在楼下坐了十几分钟…然后感觉天色开始逐渐亮起来了,再回家按门铃….终于开门了…因为头实在是太痛又很累所以直接换衣服躺床睡到了12点。
 
不过12号也就是今天,家里又擅自给咱庆祝了一次…也就是说这次过生日总共吃了2次蛋糕。
总之这次的话聚会来说还是很不错的说~虽然花了不少钱…(一群人老是抱怨咱不让请咱不认识的人…要知道咱可不希望像电影X-Project那样..原本好好的一个生日聚会最后演变成骚乱…)
 
好了,生日就说到这里。以下开始对WWDC吐槽:
10.9来说还是很给力的,不过咱觉得这个更像是10.8的更新…总之不像是大的版本…即便名称已经不再使用狮系列了。
MBA就不说啥了,虽然标称能12小时,不过实际使用能上7小时也很不错了。MacPro…反正咱估计是不会买这个了,先不说价格,就目前这扩展性我还是宁愿老款MacPro更好。外形TENGA就不说了,但这大小…真不愧是Apple做的。但是性能方面…说实话感觉还是达不到咱所期待的。
最后是大家都在吐槽的iOS 7,其实总体来说还算可以,特别是功能方面,比如增强的Find my iPhone,咱实际想恢复数据的时候都要求在设置里关掉Find my iPhone才能恢复了。而这样被偷即便刷机也无法激活什么的虽然可能在特殊状况会造成不变,不过倒是极大的满足了咱这种“咱吃亏也不会便宜你”心理的人群。
至于外观,其实还算挺好,就是icon可能不算非常好看。然后咱的iPhone4刷好之后发现特别的卡…开个app也要等差不多30秒甚至一分钟。而且很多比如半透明效果也都没有了…
不过才刚beta,希望之后的版本能加快运行速度….毕竟现在这个比iOS6还差劲呢…而且细节处理包括阴影什么的都比之前的iOS要少很多,所以理论上运行速度应该会更快。
嘛..既然目前刷上了也就懒得换了。等着下一次更新吧~
还有个iTunes Radio,话说如果这货在日区出的话,萌否电台这个计划估计会被砍掉。
 
继续阅读“这次生日正好碰上端午”

整页面可变高度UIScrollView和可变高度UITableViewCell的方法

经常做程序会有需要一页显示不完的东西要滚动,而且又正好碰上比如里面的UITextView里文字字数不确定而如果字太多要做滚动的方式,虽然UITextView自带了UIScrollView但是还是觉得不如一整页滚动的效果好?
于是解决方法就是使用单独的UIScrollView,这货在程序中应该算是最不智能的东西吧?而且又正好碰上一些高度不确定的东西比如刚才说的UITextView里的文字,似乎不能不用代码来解决了。
但是作为非老开发者来说,非常不希望完全使用代码来写界面,那么应该如何配合StoryBoard或者nib文件来制作UIScrollView呢?
解决方法的思路是这样的,首先要根据文本来确定UITextView的高度,然后再加上界面上其他东西的高度(应该说是总高度),来绘制ScrollView。
可参考这个
于是第一步:确定UITextView的高度,而这需要根据文本来运算,既然文本长度不确定,自然要从文本上下功夫了:

NSString *text = self.textview.text;
CGSize stringSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:14] constrainedToSize:CGSizeMake(320, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

代码分解第一步获取到textview里的文本,然后根据文本来确定文本的大小(宽度和高度),其中需要根据你自己实际情况修改的:
1.boldSystemFontOfSize是textview里文本的字体大小。
2.CGSizeMake里的320这个要根据textview的宽度来修改,比如在这里宽度占完整个屏幕就是320(不是640哦,iOS后台会自动算Retina的)。
得到的stringSize就是实际文本的大小(包括宽度和高度,而下面我我们直接只用高度所以实际用的时候就直接:stringSize.height),接下来要把UITextView设置成这个尺寸,这样可以显示完全部的字:

[self.textview setFrame:CGRectMake(78, 0, 320, stringSize.height + 100)];

我为什么在后面会有个+ 100呢?因为实际调试的时候发现如果直接设置高度为stringSize.height会出现最下面两行被挡住了。总之这个数字可以根据自己实际情况进行调整。
而前面的78和0这两个对应的是textview所在界面的x,y值,这个可以直接在Storyboard或者nib里textview的size inspector里的View里看到,直接照用就行了。

高深人士应该能看得出其实这里已经是手动来绘制textview了,其实本来咱是想用setContentSize单独设定高度的,但是似乎没用…

设置完了UITextView之后来设置UIScrollView:

[self.scrollview setContentSize:CGSizeMake(320, stringSize.height + 200)];

这次后面+200是因为要包含界面上其他的东西。

于是这样应该就能达到效果了,如果有误差的话稍微调整以上提到的几个数值,应该能达到你想要的效果了。

另外还有一种解决方案就是使用静态的UITableView,因为其内置已经做好UIScrollView了,只要根据UITextView来决定cell的高度就可以了。
不过可变高度的cell又是如何做到的呢?上面已经知道了如何根据文本来确定高度,那么直接将高度应用在cell里不就好了~
于是:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
NSArray *array = arraylist[row];
NSString *text = [array valueForKey:@"message"];
CGSize stringSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:12] constrainedToSize:CGSizeMake(292, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
return stringSize.height +50;
}

咱根据当前cell直接从array中直接读message,接下来的就和上面一样进行文本的长度确定,而到了最后则是返回stringSize.height,外加上自行调整的误差。

而至于当文本字体大小改变或者界面尺寸改变的时候,重新修改上面代码的对应变量即可(比如横屏等),重新运算过后就可以了。

最后附赠一个多点触控捏合缩小放大字体的代码(代码效果不是很好…参考):

- (void)viewDidLoad{
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
[self.textview addGestureRecognizer:pinchGesture];
}


- (IBAction)handlePinchGesture:(UIGestureRecognizer *)sender {
static int fontSize = 20;
if (sender.state == UIGestureRecognizerStateBegan)
{
// initialBounds = _view.bounds;
}
CGFloat factor = [(UIPinchGestureRecognizer *)sender scale];
if(factor > 1.0)
{
fontSize += 1;
}
else
{
fontSize -= 1;
}
if (fontSize >50) {
fontSize =50; return;
}
if (fontSize <5) { fontSize = 5; return; } [self.textview setFont:[UIFont fontWithName:@"Helvetica" size:fontSize]]; return; }

[Obj-c]匹配字段&NSArray里的Null问题&消除HTML转义字符

首先是监测字段匹配,假设要监测字符串string里是否含”a”这个字符:

if ([string rangeOfString:@"a"].location != NSNotFound) {
//do something
}

当NSArray为空或者里面某项为null的时候,在TableView或者其他什么界面经常会出现崩溃的问题。
解决方法:检测是否为空。但是普通的if (array != nil)是没用的,得这样操作:

if (array != [NSNull null]) {
//array not empty
}

尽管可能编译时会有警告…不过工作是正常的,至少程序不会再崩溃了。

最后,HTML输出的时候经常会连比如”&”或者空格之类的都转换成了“&amp;”或者“&nbsp;”这样的字符。
解决方法:手动转换回来。
加入以下代码:(为了防止被转换,咱已经将英文标点”;”更换成了全角的“;”,使用前请先手动更换回来)

-(NSString *)htmlEntityDecode:(NSString *)string{
string = [string stringByReplacingOccurrencesOfString:@"";" withString:@"\""];
string = [string stringByReplacingOccurrencesOfString:@"&apos;" withString:@"'"];
string = [string stringByReplacingOccurrencesOfString:@"&;" withString:@"&"];
string = [string stringByReplacingOccurrencesOfString:@"<;" withString:@"<"]; string = [string stringByReplacingOccurrencesOfString:@"&gt;" withString:@">"];
string = [string stringByReplacingOccurrencesOfString:@" ;" withString:@" "];
return string;
}

然后这么用:
string = [self htmlEntityDecode:string];
得到的string就是正常的了~

电台客户端收费已经完成了

在此之前先公布一个事,萌否电台Mac客户端或者叫萌否电台Mac版,目前准备改名叫“萌电波”~
这次是首次动用到数据库,之前在弄MoeApps和MoeApks的时候都没去想过碰它(毕竟感觉超麻烦的),这次的话则是php+sql+obj-c同时编写…真心觉得好乱(;´Д`A..不过最后还是完成了。目前已经能够联网验证用户注册信息,虽然比较简单,有被破的可能,不过总的来说咱还是控制着后台的,也就是说和某些软件那样,可以封掉网上流传的激活信息什么的。代码细节就不公布了,不过因为采用的是普通的连接验证,如果被破掉的话之后会考虑采用SSL+证书验证的方式,希望不会用到这样的方法。
屏幕快照 2013-04-15 上午12.23.59

价格也定下来了,10RMB或者5USD,又或者160日元(不过估计没人会支付日元吧…)。支持paypal和支付宝,其他的之后再添加上去。
不过话说距离上次说开始申请免费名额以来………………………….居然木有一个人报名?!!咱写的程序真的那么没用么(哭)
嘛,反正之后功能多了开始收费之后,别赖咱没提供机会喵~
继续阅读“电台客户端收费已经完成了”