btn .titleLabel.numberOfLines=2;
Translate
2015年12月4日 星期五
2015年11月26日 星期四
uiview hide show animation
UIView animation
顯現動畫
[UIView transitionWithView:self.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^(void){
[self.view setHidden:NO];
} completion:nil];
UIViewAnimationOptionTransitionFlipFromLeft 可以替換下列動畫
沒有動畫
UIViewAnimationOptionTransitionNone
翻轉動畫↪↩
UIViewAnimationOptionTransitionFlipFromLeft
UIViewAnimationOptionTransitionFlipFromRight
翻頁動畫
UIViewAnimationOptionTransitionCurlUp
UIViewAnimationOptionTransitionCurlDown
顯現動畫
UIViewAnimationOptionTransitionCrossDissolve
上下折曡動畫↑↓
UIViewAnimationOptionTransitionFlipFromTop
UIViewAnimationOptionTransitionFlipFromBottom
2015年11月25日 星期三
UIImage load Memory
ref:http://stackoverflow.com/questions/15439564/simple-resizing-of-uiimage-in-xcode
UIImage 讀取方式有以下兩種
UIImage *img = [UIImage imageNamed:@"test.png"]; // caching
UIImage *img = [UIImage imageWithContentsOfFile:@"test.png"]; // no caching
如果還是一樣大,還是改變你的尺寸吧一m一+
UIImage 讀取方式有以下兩種
UIImage *img = [UIImage imageNamed:@"test.png"]; // caching
UIImage *img = [UIImage imageWithContentsOfFile:@"test.png"]; // no caching
如果還是一樣大,還是改變你的尺寸吧一m一+
- (UIImage*)resizeImage:(UIImage *)image
{
CGSize origImageSize = [image size];
CGRect newRect = self.view.frame; //新的frame,要改的size
float ratio = MAX(newRect.size.width / origImageSize.width,
newRect.size.height / origImageSize.height);
UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 0.0);
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect
cornerRadius:5.0];
[path addClip];
CGRect imageRect;
imageRect.size.width = ratio * origImageSize.width;
imageRect.size.height = ratio * origImageSize.height;
imageRect.origin.x = (newRect.size.width - imageRect.size.width) / 2.0;
imageRect.origin.y = (newRect.size.height - imageRect.size.height) / 2.0;
[image drawInRect:imageRect];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return smallImage;
}
2015年11月20日 星期五
AppStore IDFA
當你的產品做好要上架,會需要你來勾選一些設定,有些設定真的很麻煩。
一不小心勾錯,一切重來…
1.如果你使用的是蘋果提供的廣告,你可以不用勾選我有使用idfa這個選項
2.如果你在程式有使用
NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
那請你一定要勾選我有使用idfa,接著下面會展開一些選項繼續勾選…
1.serve advertisements within the app
如果你有顯示第三方廣告。
2.Attribute this app installation to a previously served advertisement.
追蹤廣告碼,但你沒有展示廣告。
3.Attribute an action taken within this app to a previously served advertisement
追蹤廣告碼,並使用給其他服務來使用。
4.Limit Ad Tracking setting in iOS
追蹤廣告碼有使用,反正一定都要勾。
如果你的app有第三方廣告,且只是顯示,沒有做任何行為,就勾14
如果你的app沒有第三方廣告,你是拿idfa來使用做為判別裝置的代碼,就勾234
如果你的app有廣告,然後又做了追蹤廣告的行為,就全勾吧
一不小心勾錯,一切重來…
1.如果你使用的是蘋果提供的廣告,你可以不用勾選我有使用idfa這個選項
2.如果你在程式有使用
NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
那請你一定要勾選我有使用idfa,接著下面會展開一些選項繼續勾選…
1.serve advertisements within the app
如果你有顯示第三方廣告。
2.Attribute this app installation to a previously served advertisement.
追蹤廣告碼,但你沒有展示廣告。
3.Attribute an action taken within this app to a previously served advertisement
追蹤廣告碼,並使用給其他服務來使用。
4.Limit Ad Tracking setting in iOS
追蹤廣告碼有使用,反正一定都要勾。
如果你的app有第三方廣告,且只是顯示,沒有做任何行為,就勾14
如果你的app沒有第三方廣告,你是拿idfa來使用做為判別裝置的代碼,就勾234
如果你的app有廣告,然後又做了追蹤廣告的行為,就全勾吧
2015年11月13日 星期五
url 上的 picture 壓縮
private void button5_Click(object sender, EventArgs e)
{
string strtext = "https://s1.yimg.com/bt/api/res/1.2/tg4y9A._NGcShMlg5HOcUQ--/YXBwaWQ9eW5ld3NfbGVnbztmaT1pbnNldDtoPTM3MjtpbD1wbGFuZTtxPTc5O3c9NjYy/http://media.zenfs.com/zh_hant_tw/News/tvbs/TVBS-N_CLEAN_10M_20151110_13-40-03.mp4_20151110_141351.278.jpg";
WebRequest request = WebRequest.Create(new Uri(strtext));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.ContentLength > 0)
{
pictureBox1.Image = BufferToImage(CompressionImage(response.GetResponseStream(), 100));
}
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
private byte[] CompressionImage(Stream fileStream, long quality)
{
using (System.Drawing.Image img = System.Drawing.Image.FromStream(fileStream))
{
int h, w;
if (img.Width <= 100)
{
h = img.Height;
w = img.Width;
}
else
{
w = 100;
h = 100 * img.Height / img.Width;
}
using (Bitmap bitmap = new Bitmap(img, w, h))//預設為長寬各為100px
{
ImageCodecInfo CodecInfo = GetEncoder(img.RawFormat);
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, CodecInfo, myEncoderParameters);
myEncoderParameters.Dispose();
myEncoderParameter.Dispose();
return ms.ToArray();
}
}
}
}
/// <summary>
/// 將 Byte 陣列轉換為 Image。
/// </summary>
/// <param name="Buffer">Byte 陣列。</param>
private static System.Drawing.Image BufferToImage(byte[] Buffer)
{
if (Buffer == null || Buffer.Length == 0) { return null; }
byte[] data = null;
System.Drawing.Image oImage = null;
Bitmap oBitmap = null;
//建立副本
data = (byte[])Buffer.Clone();
try
{
MemoryStream oMemoryStream = new MemoryStream(Buffer);
//設定資料流位置
oMemoryStream.Position = 0;
oImage = System.Drawing.Image.FromStream(oMemoryStream);
//建立副本
oBitmap = new Bitmap(oImage);
}
catch
{
throw;
}
//return oImage;
return oBitmap;
}
{
string strtext = "https://s1.yimg.com/bt/api/res/1.2/tg4y9A._NGcShMlg5HOcUQ--/YXBwaWQ9eW5ld3NfbGVnbztmaT1pbnNldDtoPTM3MjtpbD1wbGFuZTtxPTc5O3c9NjYy/http://media.zenfs.com/zh_hant_tw/News/tvbs/TVBS-N_CLEAN_10M_20151110_13-40-03.mp4_20151110_141351.278.jpg";
WebRequest request = WebRequest.Create(new Uri(strtext));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.ContentLength > 0)
{
pictureBox1.Image = BufferToImage(CompressionImage(response.GetResponseStream(), 100));
}
}
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
private byte[] CompressionImage(Stream fileStream, long quality)
{
using (System.Drawing.Image img = System.Drawing.Image.FromStream(fileStream))
{
int h, w;
if (img.Width <= 100)
{
h = img.Height;
w = img.Width;
}
else
{
w = 100;
h = 100 * img.Height / img.Width;
}
using (Bitmap bitmap = new Bitmap(img, w, h))//預設為長寬各為100px
{
ImageCodecInfo CodecInfo = GetEncoder(img.RawFormat);
System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, CodecInfo, myEncoderParameters);
myEncoderParameters.Dispose();
myEncoderParameter.Dispose();
return ms.ToArray();
}
}
}
}
/// <summary>
/// 將 Byte 陣列轉換為 Image。
/// </summary>
/// <param name="Buffer">Byte 陣列。</param>
private static System.Drawing.Image BufferToImage(byte[] Buffer)
{
if (Buffer == null || Buffer.Length == 0) { return null; }
byte[] data = null;
System.Drawing.Image oImage = null;
Bitmap oBitmap = null;
//建立副本
data = (byte[])Buffer.Clone();
try
{
MemoryStream oMemoryStream = new MemoryStream(Buffer);
//設定資料流位置
oMemoryStream.Position = 0;
oImage = System.Drawing.Image.FromStream(oMemoryStream);
//建立副本
oBitmap = new Bitmap(oImage);
}
catch
{
throw;
}
//return oImage;
return oBitmap;
}
2015年11月11日 星期三
Sheet can not be presented because the view is not in a window
Cell View
[actionSheet showInView:self.superview];
View Control
[actionSheet showInView:self.view];
json post/ get
Get
NSString *url="http://www/getid/id=123";
NSString *result= [self Get:url];
Post - List<string> Data
NSString *url="http://www/post/update";
NSMutableArray *list = [[NSMutableArray alloc]init];
[list addObject:name]; //name is NSString
[list addObject:mobile]; //mobile is NSSTring
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:list options:0 error:nil];
NSString *result= [self Post:url value:jsonData];
Funtion
- (NSString*) Post:(NSString*)url
value:(NSData*)requestData
{
NSURL *theURL = [NSURL URLWithString:url];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[theRequest setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
theRequest.timeoutInterval=10.0;
[theRequest setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPBody: requestData];
return [self HttpResult:theRequest];
}
-(NSString*) HttpResult:(NSURLRequest*) urlRequest
{
NSURLResponse *resp = nil;
NSError *err = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&resp
error:&err];
if([data length]>0 && err == nil)
{
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
else
{
return @"nowifi";
}
return @"";
}
2015年11月10日 星期二
Xcode Object-C init
NSString Init
[NSString stringWithFormat:@"%@/%@",@"str1",@"str2"];
NSDictionary Init
NSDictionary *dir=[NSDictionary dictionaryWithObjectsAndKeys:
@"value-a",@"key-a",
@"value-b",@"key-b",
nil];
NSArray Init
NSArray *ar=@[@"a",@"b",@"c"];
NSMutableArray Init
NSMutableArray *ar=[NSMutableArray arrayWithObjects:@"",@"", nil];
taleview section hidden
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (section == 0 ) {
return nil;
}
return [super tableView:tableView titleForHeaderInSection:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section == 0 ) {
return 0;
}
else
{
return [super tableView:tableView numberOfRowsInSection:section]; //keeps
}
}
2015年11月5日 星期四
namecheap 設定Blogger 轉第三方設定
今天看到有在namecheap(https://www.namecheap.com)有便宜的xyz賣
限時~1USD/YEAR+手續費還是稅=38元
真是太開心了,趕緊來申請一個玩玩。
因為google的blogger有提供為你的網誌設定第三方網址。
簡單來說就是自動導向,只要輸入購買的網址,未來就能連到你的blogger了。
購買的細節就不多貼,網路上真的有很多,不過因為申請的有些微變動
先進到後來,將你買的網域申請,如果是裸網域,前面多打www.就可以了,像下面的圖
接下來重頭戲來了,買完之後在namecheap後台點選上方選單的dashboard,進入後台管理頁面,然後找一下左邊選單會有個【domain list】接著點【advanced dns】這一個選項...
就能看到如下的畫面,新增的話,點選3的位置,重點來了,Type下拉請選CNAME,一開始老選錯而造成導入失敗,然後再將blooger給你的資訊依次輸入再打勾儲存,結束。
最後你可以開始驗證了,如果失敗的話,就會有下面這個畫面出來,如果你都照上面設定沒錯的話,可能時間還沒到,再等一下就可以了。
2015年10月23日 星期五
其他網站
http://www.deviantart.com/
藝術
http://www.elsyy.com/material
https://www.cocoacontrols.com/controls
http://www.buzshare.com/biz/b/48097
藝術
http://www.elsyy.com/material
https://www.cocoacontrols.com/controls
http://www.buzshare.com/biz/b/48097
一些不錯的介面
→想看到圖片動畫的效果嗎?可以考慮使用它
https://github.com/Flipboard/FLAnimatedImage
→動態tag
http://code4app.com/ios/TLTagsControl/55558d81933bf0e53f8b67f1
→選取連絡人
https://www.cocoacontrols.com/controls/thcontactpicker
→重要日期分類
https://www.cocoacontrols.com/controls/thcontactpicker
2015年10月15日 星期四
Xcode object-c 常用轉換
NSMutableArray → NSArray
NSArray *array = [NSArray arrayWithArray:mutableArray]; //array is empty
NSArray *array = [mutableArray copy]; //array is nil
NSDate↔ NSString
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd"];
NSString *strDate = [f stringFromDate:[NSDate date]];
NSDate *date = [f dateFromString:@"2015-10-04"];
NSNumber↔int
int i=10;
UUID/GUID→ NSString
NSNumber *inumber=[NSNumber numberWithInt:i];
i=[inumber intValue];
UUID/GUID→ NSString
NSString *UUID=[[NSUUID UUID] UUIDString];
int↔NSString
int↔NSString
int value=0;
NSString *str=[@(value) stringValue];
value =[str intValue];
2015年5月19日 星期二
Error Microsoft.VisualStudio.Editor.Implementation.EditorPackage
問題:
Microsoft.VisualStudio.Editor.Implementation.EditorPackage
然後會列出
C:\Users\[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.xml
請去查詢的訊息
接著就無預期的關閉應用程式
解決方法:刪除cash,然後讓它重新載入
%LOCALAPPDATA%\Microsoft\VisualStudio\11.0\ComponentModelCache
如果是vs2013,請至
%LOCALAPPDATA%\Microsoft\VisualStudio\12.0\ComponentModelCache
刪除重載就可以了
可能是裝了MySQL的 ODBC影響到
Microsoft.VisualStudio.Editor.Implementation.EditorPackage
然後會列出
C:\Users\[user]\AppData\Roaming\Microsoft\VisualStudio\11.0\ActivityLog.xml
請去查詢的訊息
接著就無預期的關閉應用程式
解決方法:刪除cash,然後讓它重新載入
%LOCALAPPDATA%\Microsoft\VisualStudio\11.0\ComponentModelCache
如果是vs2013,請至
%LOCALAPPDATA%\Microsoft\VisualStudio\12.0\ComponentModelCache
刪除重載就可以了
可能是裝了MySQL的 ODBC影響到
2015年4月9日 星期四
pickerView
//如果不想用拉的宣告顯示資料位置,也在可在初始化這樣設定
//self.picker.dataSource = self;
//self.picker.delegate = self;
- (int)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
//顯示選取資料筆數
- (long)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return list1.count;
}
// 顯示選取資料
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [list1 objectAtIndex:row];
}
//顯示目前選取哪筆資料
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
NSLog(@"select:%@",[list1 objectAtIndex:row]);
}
DataPicker
//選擇時間格式
- (IBAction)selectvalue:(UIDatePicker *)sender {
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSLog(@"設定時間:%@",[fmt stringFromDate:sender.date]);
}
//另一種寫法,如果你要將現在的時間跟選的時間做倒數計時的話
- (IBAction) selectvalue:(UIDatePicker *)sender {
NSTimeInterval n = sender.countDownDuration;
NSLog(@"倒數計時秒數為:@%0f",n);
}
tableView
View
//回傳目前有幾個項目
- (NSInteger)numberOfSectionsInTableView:(UITableView *)TableView
{
return 2;
}
//回傳目前列表的數量
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger n =0;
switch (section) {
case 0:
n=[list count]; //陣列的數量
break;
case 1:
n=[list2 count];
break;
}
return n;
}
//顯示列表
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *indicator=@"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:indicator];
if(cell==nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indicator];
}
switch (indexPath.section) {
case 0:
cell.textLabel.text=[list objectAtIndex:indexPath.row];
break;
case 1:
cell.textLabel.text=[list2 objectAtIndex:indexPath.row];
break;
}
return cell;
}
//顯示列表上方的標題
-(NSString*) tableView:(UITableView*) tableView titleForHeaderInSection:(NSInteger)section
{
NSString * header= @"";
switch (section) {
case 0:
header=@"標題1";
break;
case 1:
header=@"標題2";
break;
}
return header;
}
Select
//點選資料顯示
-(void)tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%@",[list objectAtIndex:indexPath.row]);
}
Delete
//回傳列表項目的按鈕是刪除
-(UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete;
}
//刪除選擇的項目
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section) {
case 0:
[list removeObjectAtIndex:indexPath.row];
break;
case 1:
[list2 removeObjectAtIndex:indexPath.row];
break;
}
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
Add
//上方工具列的新增,工具列在拉進來此做動作,工具列不要拉到View裡面了,不然會跟著View的列表新增一直往下拉。
- (IBAction)insertData:(id)sender {
static NSInteger i;
[list addObject:[NSString stringWithFormat:@"%ld",(long)i++]];
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UITableView class]])
{
UITableView *t = (UITableView *)view;
[t reloadData];
break;
}
}
}
Sort
//列表最右邊可以用滑鼠拖移,點住不放即可拉至想移往的地方
//這一個function也是工具列的按鈕拉下來了,按一下編輯模式的拉開與關閉
- (IBAction)edit:(UIBarButtonItem *)sender
{
if(self.mytable.isEditing)
{
sender.title = @"Edit";
self.mytable.editing = NO;
}
else
{
sender.title = @"Done";
self.mytable.editing = YES;
}
}
//設定是不是可以移動列表
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
//列表交換
-(void) tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
[list exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
}
訂閱:
文章 (Atom)