iOS development လုပ်တဲ့အခါမှာ ကိုယ်ပိုင် ဖန်တီးတဲ့ အခါတွေရှိသလို github မှာ အခြားသူတွေ ဖန်တီးထားပြီးသား library ကောင်းကောင်းလေးတွေလည်း ရှိတတ်ပါတယ်။ တခြားသူတွေ ဖန်တီးထားတဲ့ library တွေကို အသုံးပြုခြင်းအားဖြင့် အချိန်ကုန်သက်သာစေပါတယ်။ မသုံးစွဲခင်မှာတော့ library ရဲ့ license ကို အရင်ဆုံး ဖတ်ဖို့ လိုပါတယ်။ ကျွန်တော် အသုံးများတဲ့ library အချို့နဲ့ အခုတလော ထွက်ရှိလာတဲ့ library အချို့ကို ဝေမျှ လိုက်ပါတယ်။
SVProgressHUD ဟာ Sam Vermette ရေးထားတဲ့ library ဖြစ်ပြီး loading တွေ မှာ ပြဖို့ အသုံးဝင်ပါတယ်။ သုံးရတာလွယ်ကူတဲ့ အတွက် MBProgressHUD အစား SVProgressHUD ကို ကျွန်တော် အဓိက ထားသုံးစွဲဖြစ်တယ်။ Cocoapod ready library ဖြစ်တဲ့ အတွက် လက်ရှိ cocoapod မှာ ထည့်ပြီး သုံးလို့ရပါတယ်။
- (void)show {
[SVProgressHUD showWithStatus:@"Doing Stuff"];
}
- (void)dismiss {
[SVProgressHUD dismiss];
}
RESTFul API ကို iOS မှာ သုံးမယ်ဆိုရင်တော့ မဖြစ်မနေ သုံးသင့်တဲ့ library ကတော့ AFNetworking ပါ။ Mattt Thompson ရေးထားပြီး MIT လိုင်စင် ဖြစ်ပါတယ်။ AFNetworkin အကြောင်း ကျွန်တော် ရေးခဲ့ဖူးပြီးသားပါ။
###Ono
website ရဲ့ API တွေက JSON မဟုတ်ပဲ XML ဖြစ်နေတဲ့ အခါမှာ iOS ရဲ့ ob jective-c နဲ့ သိပ်ပြီး အဆင်မပြေလှဘူး။ NSXMLParser ကို အသုံးပြီးတော့ XML ကို prase လုပ်ပြီး ကိုယ်သုံးချင်တဲ့ data ရအောင် ပြန်စစ်ထုတ်တာ ၊ ဒါမှမဟုတ် dictionary ပြောင်းတာ စတာတွေကို လုပ်ရတဲ့ အခါမှာ အချိန်ကုန်ပါတယ်။ JSON data ဖြစ်ခဲ့ရင်တော့ လွယ်လင့်တကူ NSDictionary ရနိုင်ပါတယ်။ XML အတွက် ကျွန်တော်တို့တွေ Ono ကို အသုံးပြုနိုင်ပါတယ်။
NSData *data = ...;
NSError *error;
ONOXMLDocument *document = [ONOXMLDocument XMLDocumentWithData:data error:&error];
for (ONOXMLElement *element in document.rootElement.children) {
NSLog(@"%@: %@", element.tag, element.attributes);
}
// Support for Namespaces
NSString *author = [[document.rootElement firstChildWithTag:@"creator" inNamespace:@"dc"] stringValue];
// Automatic Conversion for Number & Date Values
NSDate *date = [[document.rootElement firstChildWithTag:@"created_at"] dateValue]; // ISO 8601 Timestamp
NSInteger numberOfWords = [[document.rootElement firstChildWithTag:@"word_count"] numberValue] integerValue];
BOOL isPublished = [[document.rootElement firstChildWithTag:@"is_published"] numberValue] boolValue];
// Convenient Accessors for Attributes
NSString *unit = [document.rootElement firstChildWithTag:@"Length"][@"unit"]
NSDictionary *authorAttributes = [[document.rootElement firstChildWithTag:@"author"] attributes];
// Support for XPath & CSS Queries
[document enumerateElementsWithXPath:@"//Content" block:^(ONOXMLElement *element) {
NSLog(@"%@", element);
}];
TweetBot 3 မှာ image ကို နှိပ်လိုက်ရင် HUD layer နဲ့ ပုံကို ပြတာကို သတိထားမိမှာပါ။ အဲဒီလိုမျိုး ပုံစံ ဖန်တီးမယ်ဆိုရင်တော့ URBMediaFocusViewController ကို အသုံးပြုနိုင်ပါတယ်။ TweeBot 3 လိုမျိုး image ကို Drag လုပ်ပြီး ပြန်ဖျောက်လို့ရပါတယ်။
Twitter လိုမျိုး client တွေမှာ user ကို mention လုပ်ထားတဲ့ @username ကို နှိပ်လိုက်ရင် သက်ဆိုင်ရာ user ကို ရောက်သွားတာ ကိုတွေ့နိုင်ပါမယ်။ ဒါ့အပြင် HTML link တွေကိုလည်း နှိပ်လို့ရတာကို တွေ့မှာပါ။ ပုံမှန် သမာရိုးကျ webivew ကို အသုံးပြုရင် page load တွေကို အချိန်ကြာစေပါတယ်။ TTTAttributedLabel ဟာ CoreText နဲ့ Core Graphic ကို အသုံးပြုထားတဲ့ အတွက် twitter လိုမျိုး client တွေ အတွက် အဆင်ပြေပါတယ်။
TTTAttributedLabel *tttLabel = [[TTTAttributedLabel alloc]initWithFrame:CGRectMake(10, 10, 200, 200)];
tttLabel.delegate = self;
NSString *labelText = @"Lost? Learn more.";
tttLabel.text = labelText;
NSRange r = [labelText rangeOfString:@"Learn more"];
[tttLabel addLinkToURL:[NSURL URLWithString:@"action://show-help"] withRange:r];
[self.view addSubview:tttLabel];
tttLabel.userInteractionEnabled=YES;
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url {
NSLog(@"Did click");
}
iOS 7 ရဲ့ Wallpaper လိုမျိုး Paralleax ကို ကိုယ့်ရဲ့ project မှာ သုံးချင်တယ်ဆိုရင်တော့ NGAParallaxMotion ကို သုံးသင့်ပါတယ်။ Interface Builder ရဲ့ Key Path ကနေ အသုံးပြုနိုင်သလို code ကနေ လည်း အသုံးပြုနိုင်ပါတယ်။
theView.parallaxIntensity = 10;
iOS 7 မှာ သမာရိုးက Present Model ထက် background blur ဖြစ်နေတဲ့ ပုံစံ design အတွက် BlurryModalSegue ကို အသုံးပြုနိုင်ပါတယ်။ CocoaPod ကို support လုပ်ပြီးတော့ Storyboard ကိုလည်း support လုပ်ပါတယ်။
iOS မှာ In App Purchasesကို လွယ်လင့်တကူ အသုံးပြုဖို့အတွက် IAPHelper ကို အသုံးပြုနိုင်ပါတယ်။ အသုံးပြုရတာလွယ်ကူပြီးတော့ Purchased တွေကို keychain မှာ သိမ်းထားတဲ့အတွက် ပုံမှန် သမာရိုးကျ NSUserDefault မှာ သိမ်းတာထက် လုံခြုံမှုရှိပါတယ်။
if(![IAPShare sharedHelper].iap) {
NSSet* dataSet = [[NSSet alloc] initWithObjects:@"com.comquas.iap.test", nil];
[IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];
}
[IAPShare sharedHelper].iap.production = NO;
[[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response)
{
if(response > 0 ) {
SKProduct* product =[[IAPShare sharedHelper].iap.products objectAtIndex:0];
[[IAPShare sharedHelper].iap buyProduct:product
onCompletion:^(SKPaymentTransaction* trans){
if(trans.error)
{
NSLog(@"Fail %@",[trans.error localizedDescription]);
}
else if(trans.transactionState == SKPaymentTransactionStatePurchased) {
[[IAPShare sharedHelper].iap checkReceipt:trans.transactionReceipt AndSharedSecret:@"your sharesecret" onCompletion:^(NSString *response, NSError *error) {
//Convert JSON String to NSDictionary
NSDictionary* rec = [IAPShare toJSON:response];
if([rec[@"status"] integerValue]==0)
{
NSString *productIdentifier = trans.payment.productIdentifier;
[[IAPShare sharedHelper].iap provideContent:productIdentifier];
NSLog(@"SUCCESS %@",response);
NSLog(@"Pruchases %@",[IAPShare sharedHelper].iap.purchasedProducts);
}
else {
NSLog(@"Fail");
}
}];
}
else if(trans.transactionState == SKPaymentTransactionStateFailed) {
NSLog(@"Fail");
}
}];//end of buy product
}
}];