Translate

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*)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有廣告,然後又做了追蹤廣告的行為,就全勾吧

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;
        }

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給你的資訊依次輸入再打勾儲存,結束。
 




















最後你可以開始驗證了,如果失敗的話,就會有下面這個畫面出來,如果你都照上面設定沒錯的話,可能時間還沒到,再等一下就可以了。





~END~祝有個美好的一天