ããã«ã¡ã¯ãHabrã®èŠªæãªãèªè
ïŒ
ãã®èšäºã¯ãiOS Developer Notesã·ãªãŒãºã®ç¬¬2éšã§ãã
å
容ïŒ
- ããŒã1ïŒãã¡ã€ã«ã®æäœã ã·ã³ã°ã«ãã³ãã³ãã¬ãŒãã ãªãŒãã£ãªãæäœããŸãã ãããªãæäœããŸãã ã¢ããªå
賌å
¥
- ããŒã2ïŒç¬èªã®ãããã¢ããã Navigation Controllerã§ã¢ãŒãã«ã»ã°ãšã䜿çšããæ¹æ³ã ã³ã¢ã°ã©ãã£ãã¯ã¹ UIWebViewããã³ScrollViewã䜿çšãã
- ããŒã3ïŒèªåã¬ã€ã¢ãŠãã®ãªãç掻ã ã¹ãã©ãã·ã¥ã¹ã¯ãªãŒã³ iOS 6以éã§ããã€ã¹ã®åããæäœããŸãã UITextFieldã³ã³ãã³ãã·ãã
- ããŒã4ïŒGoogle Analytics; ããã·ã¥éç¥ PSPDFKit; Facebookçµç±ã§ã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ããŸãã åéã«ç¥ããã-FacebookãTwitterãã¡ãŒã«
- ããŒã5ïŒã³ã¢ããŒã¿ã UITableViewããã³UICollectionView
ããã¯ããªãåºç¯ãªãããã¯ãªã®ã§ãã«ã¹ã¿ãã€ãºå¯èœãªãããã¢ãããèšäºã®æåŸã§æ±ããŸãã ãããŸã§ã®éãä»ã®ãã¹ãŠã
Navigation Controllerã§ã¢ãŒãã«ã»ã°ãšã䜿çšããæ¹æ³
ãã®ãããåé¡ããããŸããã¯ã©ã€ã¢ã³ãã¯æšæºã®Navigation Controllerãã©ã³ãžã·ã§ã³ïŒãå³ãžã®ãªãŒããŒã©ãããïŒã奜ãŸãªããããããšãã°ãç»é¢ãäžããåããããšã«ãã£ãŠæ°ããç»é¢ã衚瀺ããããšèããŠããŸãã ããã«åé¡ã®è§£æ±ºçãããããŸããã»ã°ãšã®è¡šç€ºãã¢ãŒãã«ã«å€æŽããŸãã ãã¹ãŠã¯åé¡ãããŸããããç»é¢ã®éå±€ãæã€Navigation Controllerã®ããžãã¯ã¯å£ããŠããŸãã ãã®çµæãã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããŸãã ã¢ãŒãã«ã»ã°ãšãå¿
èŠã«ãªããŸããããããã·ã¥ã»ã°ãšæ©èœãå¿
èŠã§ãã ãã®åé¡ã解決ããç°¡åãªæ¹æ³ããããšæããŸãããUIStoryboardSegueã®ãµãã¯ã©ã¹ãèšè¿°ããããšããå§ãããŸãã å€æŽããå¿
èŠãããã®ã¯ãã¯ã©ã¹ã®.mãã¡ã€ã«ã ãã§ãã ããå
·äœçã«ã¯ã
performã¡ãœããïŒ
UIViewAnimationOptionTransitionFlipFromBottomã®ä»£ããã«ãã¯ã©ã€ã¢ã³ãã®äžå¿ã«è¿ããã©ã³ãžã·ã§ã³ã¹ã¿ã€ã«ãé
眮ã§ããŸãã
以äžã§ãïŒ ãªããŠç°¡åãªã®ã§ãããã ããã§ãã¹ããŒãªãŒããŒãã»ã°ãšã®ã«ã¹ã¿ã ã¹ã¿ã€ã«ãæå®ããæ°ããã¯ã©ã¹ãæå®ããŠãé·ç§»ã¿ã€ãã§Navigation Controllerã»ã°ãšãååŸã§ããŸãã
ã³ã¢ã°ã©ãã£ãã¯ã¹
ããæç¹ã§ãã¯ã©ã€ã¢ã³ãã¯ãã¿ã³ã®å¹
ã5ãã¯ã»ã«ãã€å€æŽããå¿
èŠããããã³ã«ãã¶ã€ããŒã蹎ãã®ã«ããããããŠããŸãïŒçµå±ã®ãšããããã¿ã³ããšã«ãã¶ã€ããŒãå¥ã
ã®çµµãæããïŒã QuartzCore.frameworkã䜿çšããŠãäžžã¿ã垯ã³ãçžãšå¢çç·ãæã€ç¬èªã®ãã¿ã³ãäœæããŸãã ç¹°ãè¿ããŸãããã·ã³ã°ã«ãã³ã®å Žåãšåæ§ã«ããããžã§ã¯ãã®äœæ¥ãé«éåããã¹ããããã®ãããªãã®ã§ãã
å®éããã®ã¢ãããŒãã¯UIViewã®ãµãã¯ã©ã¹ã§äœ¿çšã§ããŸãïŒUIButtonã¯ãŸãã«ããã§ãïŒã UIViewã®
awakeFromNibã¡ãœãããæžãæããŸãã
- (void)awakeFromNib { [super awakeFromNib]; self.layer.cornerRadius = 5.0f; self.layer.masksToBounds = YES; self.layer.borderColor = [UIColor whiteColor].CGColor; self.layer.borderWidth = 1.0f; }
ãã¹ãŠãã·ã³ãã«ã§ãã ãŸããç¶æ¿ã§ã¯ãã¹ãŒããŒã¯ã©ã¹ãäœæ¥ãå®äºããåŸã«ã³ãŒããå®è¡ããå¿
èŠããããŸãã ãã®ãããåãã¡ãœãããã¹ãŒããŒã¯ã©ã¹ã§åŒã³åºããŸãã 次ã«ããã®çš®ã®ã¬ã€ã€ãŒã®è§ã®æ²çååŸãèšå®ããã¬ã€ã€ãŒãæå®ããããã¹ã¯ã«åŸãããã«ããŸãã 第äžã«ããã¬ãŒã ã®è²ïŒãã¡ããCGColorïŒãšãã®åããèšå®ããŸãã
ã°ã©ãã£ãã¯ã³ã³ããã¹ãã§æ·±ãäœæ¥ãæåŸ
ããŠãã人ãããããšã¯ç¥ã£ãŠããŸãããã ããããããªãŒã©ã³ãµãŒã«ãšã£ãŠã¯é«éããŒãã·ãŒãã§ããCoreGraphicsã®æ°ããã¿ã¹ã¯ãç»å ŽããããèšäºãæžããŸãã
UIWebViewããã³ScrollViewã䜿çšãã
ãã§ã«UIWebViewããããŸããã³ã³ãã³ããããŒãããŠã¿ãŸãããã
NSString *htmlString; NSString *cssString; <... ...> htmlString = [NSString stringWithFormat:@"<style>%@</style>%@", cssString, htmlString]; NSURL *url = [[NSURL alloc] initFileURLWithPath:pathToApplicationDirectory]; [self hideOverscrollShadowsForWebView:webView]; [webView loadHTMLString:htmlString baseURL:url];
ç§ãã¡ã®ã¹ã¿ã€ã«ãšhtmlã®WebããŒãžãååŸããŸããã UIWebViewã®ãªãŒããŒã¯ããã¯äžã«äžå¿«ãªç°è²ã®åœ±ãé ãããã«ã次ã®ã¡ãœããã䜿çšããŸããã
- (void)hideOverscrollShadowsForWebView:(UIWebView *)webView { id scrollview = [webView.subviews objectAtIndex:0]; for (UIView *subview in [scrollview subviews]) if ([subview isKindOfClass:[UIImageView class]]) subview.hidden = YES; webView.backgroundColor = [UIColor clearColor]; }
UIWebViewã«å±ããScrollviewãããã¹ãŠã®åãã¥ãŒãé衚瀺ã«ããŸãã ãŸããéæãªèæ¯ãèšå®ããŸãã
UIScrollViewã«ã€ããŠèšãã¹ãããšã¯1ã€ã ãã§ããcontentSizeããããã£ãèšå®ããããšãå¿ããªãã§ãã ããã
ã«ã¹ã¿ã ãããã¢ãã
ãã®èšäºã®å·šäººã«ã€ããŠè©±ãæãæ¥ãŸããã ä»åãã¯ã©ã€ã¢ã³ãã¯ãåå ããã«ãããã¢ããã®å€èŠ³ããã°ããå€æŽããæ©èœãå¿
èŠãšããŠããŸããã ãŸããä»äºã®ããã«ïŒ
çè«ãç§ãã¡å
šå¡ãã©ã®ããã«ç©äºãæãéãããã«ã€ããŠå°ã話ããŸãããã
ã¹ããŒãªãŒããŒãã§ã¯ãæ¬æ Œçãªãããã¢ãããŠã£ã³ããŠãå®è£
ããããšã¯ã§ããŸããããå¥ã®PopupView.xibãã¡ã€ã«ãäœæã§ããŸãã
ã¢ãã«ãšããŠã3ã€ã®ã¯ã©ã¹PopupViewãPopupControllerãPopupControllerDelegateãäœæããŸãã
æåã«ãã¹ã¯ãªãŒã³ã·ã§ããã®ããã«ãããã¢ãããŠã£ã³ããŠã®ã¬ã€ã¢ãŠããçµã¿ç«ãŠãŸãã ãã®å Žåããã¡ã€ã«ã®ææè
ã¯PopupControllerã¯ã©ã¹ã®ãªããžã§ã¯ãã«ãªãããã¥ãŒèªäœã¯PopupViewã¯ã©ã¹ã®ãªããžã§ã¯ãã«ãªããŸãã èæ¯ãã¥ãŒã¯ãåéæã®æããç°è²ã®UIViewã§ãã
æåã«
PopupView.hã®å®è£
ãèŠãŠã¿ãŸãããã
æŒããŠïŒ #import <UIKit/UIKit.h> @interface PopupView : UIView @property (strong, nonatomic) IBOutlet UIView *backgroundView; @property (strong, nonatomic) IBOutlet UIView *innerPopupView; @property (strong, nonatomic) IBOutlet UILabel *popupTitleLabel; @property (strong, nonatomic) IBOutlet UILabel *popupTextLabel; @property (strong, nonatomic) IBOutlet UIButton *popupButton; @end
ãã¹ãŠã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãã³ãŒãã«ããã¯ããŸããã
PopupView.mã¯å€æŽãããæšæºã®çæã³ãŒããæ®ããŸããã
ãããã¢ãããŠã£ã³ããŠãã³ãã¬ãŒãããããŸãããä»ã§ã¯å·§ã¿ã«äœ¿çšããå¿
èŠããããŸãã PopupControllerãäœæããŸãã
PopupController.h ïŒ
æŒããŠïŒ #import <Foundation/Foundation.h> #import "PopupControllerDelegate.h" #import "PopupView.h" @interface PopupController : NSObject // UIViewController, PopupView @property (strong, nonatomic) UIViewController<PopupControllerDelegate> *delegate; // . ! @property (strong, nonatomic) NSMutableArray *activePopups; - (IBAction)touchedButton:(UIButton *)sender; - (id)initWithDelegate:(UIViewController<PopupControllerDelegate> *)delegate; - (void)showHelloWorldPopup; - (void)dismissAllPopups; @end
å¿
èŠãªããããã£ãšãåæåã®ããã®ãããªãã¯ã¡ãœãããèšå®ããç°¡åãªãããã¢ãããŠã£ã³ããŠã衚瀺ãããã¹ãŠã®ãããã¢ãããŠã£ã³ããŠãéããã ãã§ããã ãŸããPopupControllerã®ãããã¢ããå
ã®ãã¿ã³ã«å°ããªã¢ã¯ã·ã§ã³ãè¿œå ããŸããã
PopupController.m ïŒ
æŒããŠïŒ #import "PopupController.h" @implementation PopupController - (id)initWithDelegate:(UIViewController<PopupControllerDelegate> *)delegate { self = [super init]; if (self) { // self.activePopups = [NSMutableArray array]; // self.delegate = delegate; } return self; } - (void)showHelloWorldPopup { PopupView *popup = [self popupFromRestorationID:@"text"]; [self configurePopup:popup]; [self showPopup:popup]; } - (IBAction)touchedButton:(UIButton *)sender { [self.delegate touchedPopupButton:sender]; } - (void)dismissAllPopups { for (UIView *popup in activePopups) { [self hidePopup:popup]; } } <...>
åæåäžã«ãããã«ã¯ã©ã¹ã®ããªã²ãŒããèšå®ããŸãã
èªã¿ãããããããã«ã
showHelloWorldPopupã¡ãœããã®ã³ãŒããä»ã®3ã€ã®ã¡ãœããã«åå²ããŸããããããã¢ãããŠã£ã³ããŠãåæåããæ§æãã衚瀺ããŸãã
ãŠãŒã¶ãŒããããã¢ãããŠã£ã³ããŠã®ãã¿ã³ã«è§Šãããšãããã«ã€ããŠããªã²ãŒãã«éç¥ããŸãã
dismissAllPopupsã¡ãœããã¯ãå
±æé
åå
ã®ãã¹ãŠã®ãããã¢ãããåçŽã«èµ°æ»ããŠããããããéããŸãã
äžè¶³ããŠããã¡ãœãããã¯ãªãŒã³ã¢ããããŸãããïŒ
æŒããŠïŒ <...> - (PopupView *)popupFromRestorationID:(NSString *)restorationID {
é çªã«ãã¹ãŠã®ããªãã¯ïŒ
- UIViewã䜿çšããã¢ãã¡ãŒã·ã§ã³ïŒanimationsïŒãããã¯ã«èšè¿°ãããŠãããã¹ãŠã®ãã®ã¯ãèšå®ãããæéããããŠåŸã
ã«å®è¡ãããŸãã completionïŒãããã¯ã®ã³ãŒãã¯ã ã¢ãã¡ãŒã·ã§ã³ãããã¯ã®çŽåŸã«å³åº§ã«å®è¡ãããŸãã
- ãŠãŒã¶ãŒãã°ã¬ãŒã®æ·¡è²è¡šç€ºãã¯ãªãã¯ãããšããããã¢ãããããã«æ¶ããŸã
- 1ã€ã®ç¶æ
ã®ãã¿ã³ããã¹ããèšå®ããã ãã§ãä»ã®ç¶æ
ã®ããã¹ãã¯å€æŽãããªãããã setTitleïŒforButtonïŒã¡ãœããã¯ãã¹ãŠã®ç¶æ
ã®ãã¿ã³ããã¹ããäžåºŠã«å€æŽããŸã
åæ§ã®ãããã¢ããã¢ãŒããã¯ãã£ãäœæããããšã«ãããã¯ã©ã€ã¢ã³ãã¯åå ããã«ãŠã£ã³ããŠã®å€èŠ³ãå€æŽã§ããŸãã ã¯ã©ã€ã¢ã³ããèŠçŽ ã®è²ããµã€ãºãé
眮ãå€æŽã§ããããã«ããŸããã³ãŒããšã®æ¥ç¶ã«è§Šããªãéãããã¹ãŠãæ£åžžã«æ©èœããŸãã
ããŠããããŠæåŸã«ãç§ãã¡ã®ã¯ã©ã¹ãã©ã®ããã«æ©èœãããã玹ä»ããŸãã
PopupControllerDelegate.hãè¿œå ã
ãŸã ã
#import <Foundation/Foundation.h> @protocol PopupControllerDelegate @required - (void)touchedPopupButton:(UIButton *)sender; @end
ãããã¢ãããŠã£ã³ããŠã衚瀺ãããUIViewControllerã¯ããã®ãŠã£ã³ããŠã®ã€ãã³ããåŠçããPopupControllerDelegateãããã³ã«ã«å¿çã§ããå¿
èŠããããŸãã
ããšãã°ããã¥ãŒãèªã¿èŸŒãã åŸã«HelloWorldãŠã£ã³ããŠã衚瀺ããŸããããã¯ãç®çã®ãããã³ã«ã«å¿çãããã§ã«åæåãããpopupControllerãªããžã§ã¯ããæã£ãŠããŸãã 次ã®ã³ãŒãã
viewDidAppearã«è¿œå ããŸã
ã [popupController showHelloWorldPopup];
ãããŠããããã¢ããã€ãã³ããã³ãã©ãŒãè¿œå ããŸãã
- (void)touchedPopupButton:(UIButton *)sender {
ãããã«
æåŸãŸã§èªãã§ãããŠããããšãïŒ
èšäºã®2çªç®ã®éšåã¯ããã³ã¯ãŒããŒã«é£ã¶åã«ãã¢ãžã§ããŽã©ç©ºæž¯ã§æžãããŸããã å€é
ããã³ãŒããŒããªããªã£ãã
èš±ããŠãã ãããããã¹ã/ã³ãŒãã«èª€åã誀ããèŠã€ãã£ãå Žåã¯
ãhabracenterã«ãç¥ãããã ãããæ¥ãã§ãã€ãã¹ãå
¥åããããæã£ãã³ã¡ã³ããæžãããããªãã§ãã ããã
次ã®èšäºã¯ããã«èå³æ·±ããããã¯ã«ãªããŸãïŒãœãŒã·ã£ã«ãããã¯ãŒã¯ã§ã®ã³ã³ãã³ãã®å
±æãPSPDFKitãããã·ã¥éç¥ã