2015年5月21日 星期四
2015年5月20日 星期三
[Android]Google Play 開發人員帳戶建立
第一次使用 Google Play 開發人員帳戶嗎?請參考基本須知事項
註冊 Google Play 開發人員帳戶
如要在 Google Play 發佈 Android 應用程式,您必須建立 Google Play 開發人員帳戶。
Google Play Developer Registration (Google Play 开发者注册)
Learn how to register a Google Play Developer. 这个视频给你一些简单的注册步骤,让你轻轻松松成为一个Google Play 开发者。 play.google.com/developerhelp
請參閱以下入門說明:
您可以使用自己的 Google 帳戶申請開發人員帳戶。只要擁有開發人員帳戶,即可使用 Google Play 開發人員控制台發佈及管理您的應用程式。
申請開發人員帳戶
建立新帳戶後,支援小組就能將您現有的應用程式轉移至新帳戶。
在申請帳戶的過程中,請務必詳閱並接受《Google Play 開發人員發佈協議》。
您可以使用 Google 電子錢包接受的付款方式支付註冊費 (只需繳交一次)。
輸入您的帳戶詳細資料。Google Play 會顯示您的「開發人員名稱」供客戶參考。
建立帳戶後,您可以新增更多帳戶資訊。
如要在 Google Play 發佈 Android 應用程式,您必須建立 Google Play 開發人員帳戶。
Google Play Developer Registration (Google Play 开发者注册)
Learn how to register a Google Play Developer. 这个视频给你一些简单的注册步骤,让你轻轻松松成为一个Google Play 开发者。 play.google.com/developerhelp
請參閱以下入門說明:
您可以使用自己的 Google 帳戶申請開發人員帳戶。只要擁有開發人員帳戶,即可使用 Google Play 開發人員控制台發佈及管理您的應用程式。
申請開發人員帳戶
建立新帳戶後,支援小組就能將您現有的應用程式轉移至新帳戶。
在申請帳戶的過程中,請務必詳閱並接受《Google Play 開發人員發佈協議》。
您可以使用 Google 電子錢包接受的付款方式支付註冊費 (只需繳交一次)。
輸入您的帳戶詳細資料。Google Play 會顯示您的「開發人員名稱」供客戶參考。
建立帳戶後,您可以新增更多帳戶資訊。
2015年5月14日 星期四
[IOS] imageNamed和imageWithContentsOfFile的區別
imageNamed和imageWithContentsOfFile的區別
IOS内存稀缺,而图片资源通常又是最占内存的部分之一,因此,选择如何加载图片,对于优化应用内存占用量,能起到立竿见影的效果。通常加载图片的方式有两种:
那么该如何选择呢?
IOS内存稀缺,而图片资源通常又是最占内存的部分之一,因此,选择如何加载图片,对于优化应用内存占用量,能起到立竿见影的效果。通常加载图片的方式有两种:
一、imageNamed
为什么有两种方法完成同样的事情呢?imageNamed的优点在于可以缓存已经加载的图片。苹果的文档中有如下说法:
This method looks in the system caches for an image object with the specified name and returns that object if it exists. If a matching image object is not already in the cache, this method locates and loads the image data from disk or asset catelog, and then returns the resulting object. You can not assume that this method is thread safe.
这种方法会首先在系统缓存中根据指定的名字寻找图片,如果找到了就返回。如果没有在缓存中找到图片,该方法会从指定的文件中加载图片数据,并将其缓存起来,然后再把结果返回,下次再使用该名称图片的时候就省去了从硬盘中加载图片的过程。对于相同名称的图片,系统只会把它Cache到内存一次。
另外,在iOS4及以上系统中,如果是PNG格式的图片,使用该方法加载时不用再指定文件的.png后缀,即只写文件名称即可。
最后,在iOS4及以上系统中,如果屏幕的scale是2(即高分辨率屏幕),该方法会自动使用加上@2x后缀的图片。比如在高分辨率屏幕设备上要加载名称为button的图片,该方法会自动使用名称为button@2x的图片;如果找不到该名称图片再去加载名称为button的图片。这就为开发者省去了适配高、低分辨率屏幕的时间。
二、imageWithContentsOfFile或者imageWithData
而imageWithContentsOfFile方法只是简单的加载图片,并不会将图片缓存起来,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,可以使用这种方式。
三、如何选择
两种加载图片方法的使用方式:
- UIImage *img = [UIImage imageNamed:@"myImage"]; // caching
- // or
- UIImage *img = [UIImage imageWithContentsOfFile:@"myImage"]; // no caching
如果加载一张很大的图片,并且只使用一次,那么就不需要缓存这个图片。这种情况imageWithContentsOfFile比较合适——系统不会浪费内存来缓存图片。
然而,如果在程序中经常需要重用的图片,比如用于UITableView的图片,那么最好是选择imageNamed方法。这种方法可以节省出每次都从磁盘加载图片的时间。
2015年5月12日 星期二
[IOS]UIImageView常用操作
UIImageView
顾名思义,是用来放置图片的。使用Interface Builder设计界面时,当然可以直接将控件拖进去并设置相关属性,这就不说了,这里讲的是用代码。
1、创建一个UIImageView:
创建一个UIImageView对象有五种方法:
UIImageView *imageView1 = [[UIImageView alloc] init]; UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:(CGRect)]; UIImageView *imageView3 = [[UIImageView alloc] initWithImage:(UIImage *)]; UIImageView *imageView4 = [[UIImageView alloc] initWithImage:(UIImage *) highlightedImage:(UIImage *)]; UIImageView *imageView5 = [[UIImageView alloc] initWithCoder:(NSCoder *)];
比较常用的是前边三个。至于第四个,当这个ImageView的highlighted属性是YES时,显示的就是参数highlightedImage,一般情况下显示的是第一个参数UIImage。
2、frame与bounds属性:
上述创建一个UIImageView的方法中,第二个方法是在创建时就设定位置和大小。
当之后想改变位置时,可以重新设定frame属性:
imageView.frame = CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat heigth);
注意到UIImageView还有一个bounds属性
imageView.bounds = CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat heigth);
那么这个属性跟frame有什么区别呢?
我的理解是,frame设置其位置和大小,而bounds只能设置其大小,其参数中的x、y不起作用即便是之前没有设定frame属性,控件最终的位置也不是bounds所设定的参数。bounds实现的是将UIImageView控件以原来的中心为中心进行缩放。例如有如下代码:
imageView.frame = CGRectMake(0, 0, 320, 460); imageView.bounds = CGRectMake(100, 100, 160, 230);
执行之后,这个imageView的位置和大小是(80, 115, 160, 230)。
3、contentMode属性:
这个属性是用来设置图片的显示方式,如居中、居右,是否缩放等,有以下几个常量可供设定:
UIViewContentModeScaleToFill UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill UIViewContentModeRedraw UIViewContentModeCenter UIViewContentModeTop UIViewContentModeBottom UIViewContentModeLeft UIViewContentModeRight UIViewContentModeTopLeft UIViewContentModeTopRight UIViewContentModeBottomLeft UIViewContentModeBottomRight
注意以上几个常量,凡是没有带Scale的,当图片尺寸超过 ImageView尺寸时,只有部分显示在ImageView中。UIViewContentModeScaleToFill属性会导致图片变形。UIViewContentModeScaleAspectFit会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白。UIViewContentModeScaleAspectFill也会证图片比例不变,但是是填充整个ImageView的,可能只有部分图片显示出来。
前三个效果如下图:
UIViewContentModeScaleToFill UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill
4、更改位置
更改一个UIImageView的位置,可以
4.1 直接修改其frame属性
4.2 修改其center属性:
imageView.center = CGPointMake(CGFloat x, CGFloat y);
center属性指的就是这个ImageView的中间点。
4.3 使用transform属性
imageView.transform = CGAffineTransformMakeTranslation(CGFloat dx, CGFloat dy);
其中dx与dy表示想要往x或者y方向移动多少,而不是移动到多少。
5、旋转图像
imageView.transform = CGAffineTransformMakeRotation(CGFloat angle);
要注意它是按照顺时针方向旋转的,而且旋转中心是原始ImageView的中心,也就是center属性表示的位置。
这个方法的参数angle的单位是弧度,而不是我们最常用的度数,所以可以写一个宏定义:
#define degreesToRadians(x) (M_PI*(x)/180.0)
6、缩放图像
还是使用transform属性:
imageView.transform = CGAffineTransformMakeScale(CGFloat scale_w, CGFloat scale_h);
其中,CGFloat scale_w与CGFloat scale_h分别表示将原来的宽度和高度缩放到多少倍,下图是缩放到原来的0.6倍的示意图:
7、播放一系列图片
imageView.animationImages = imagesArray; // 设定所有的图片在多少秒内播放完毕 imageView.animationDuration = [imagesArray count]; // 不重复播放多少遍,0表示无数遍 imageView.animationRepeatCount = 0; // 开始播放 [imageView startAnimating];
8、为图片添加单击事件:
imageView.userInteractionEnabled = YES; UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; [imageView addGestureRecognizer:singleTap];
一定要先将userInteractionEnabled置为YES,这样才能响应单击事件。
9、其他设置
imageView.hidden = YES或者NO; // 隐藏或者显示图片 imageView.alpha = (CGFloat) al; // 设置透明度 imageView.highlightedImage = (UIImage *)hightlightedImage; // 设置高亮时显示的图片 imageView.image = (UIImage *)image; // 设置正常显示的图片 [imageView sizeToFit]; // 将图片尺寸调整为与内容图片相同
資料來源: https://m.oschina.net/blog/76128
2015年5月9日 星期六
追蹤Facebook粉絲專頁不漏訊及取得RSS訂閱連結
追蹤Facebook粉絲專頁不漏訊及取得RSS訂閱連結
2012年時Facebook 粉絲專頁(當時還叫粉絲團) 都還有提供 RSS 連結,這讓不想按讚加入粉絲專頁但還是想取得最新資訊的使用者們有個簡易的管道可以訂閱,
然而在經歷幾次改版後,粉絲專頁的 RSS 連結已經再也找不到了。
這篇就來解說一下目前幾種常用的粉絲專頁訂閱方式,當然也要再找回最方便的RSS!
第一種:對粉絲專頁按讚自動追蹤
只要對粉絲專頁按「讚」,Facebook就會自動幫我們加入追蹤。如果使用者沒有特地取消追蹤,後續粉絲專頁有發文就有機會出現在使用者的動態時報中。
不過由於Facebook不斷調整粉絲專頁發文出現在使用者動態時報的機制,
現在如果沒買廣告,粉絲專頁的發文很有可能不會主動出現在使用者的頁面上,
這讓認真經營但沒錢買廣告的粉絲專頁曝光量下降很多,
也讓使用者無意間錯過了不少優質內容。
第二種:接收通知及新增到興趣主題清單
為了避免Facebook擅自過濾出現在我們動態時報的發文,我們在粉絲專頁按讚後,還可以加碼選擇要接收通知或將粉絲專頁新增到興趣主題清單,
接收通知是只要有新文章,就會自動在右上角通知出現提醒,這種不會漏但有點煩,
如果不想要這麼擾人的話也可以選擇新增到興趣主題清單,
清單內的粉絲專頁若有新文章,會在清單處出現數字,我們也能自行找時間閱讀!
建立興趣清單時還可以一併選擇這個名單的分享對象,可選擇:
公開:所有人都可以看到並跟著訂閱你的主題清單
朋友:朋友可以看到並訂閱你的主題清單
只限本人:只有你看得到這個主題清單和名單中的成員
第三種:找回失踨的 RSS 連結
這篇文章的開頭有提到粉絲專頁的 RSS 連結已失踨許久,今天我們就要來找回傳說中的 RSS 連結!
下方已有新增查詢小工具囉!更快更方便!
以下是手動版本,打開粉絲專頁後點下右鍵,用瀏覽器檢視原始碼,
原始碼是一堆比較難看的 html 和 javascript code,我們只要利用搜尋即可。
方法一:搜尋 TimelineController.init 找到以下字串
"onload":["TimelineController.init(\"301777776577097\", \"timeline\");"]
方法二:搜尋 profile_id 找到類似這樣的字串
profile_id=301777776577097
其中紅色的地方就是我們要找的粉絲專頁的 id 啦!
接下來只要將 id 接在這串字後面就可以得到粉絲專頁的 RSS 連結囉!
http://www.facebook.com/feeds/page.php?format=rss20&id=301777776577097
有了 RSS 連結,那我們就可以直接用 RSS Reader 來獲取最新消息了!
若覺得以上步驟很麻煩,現在也新增小工具囉,直接填入粉絲專頁網址即可:
訂閱:
文章 (Atom)