ãŸããã
ãããã¯ã¯C / Objective-Cãžã®éåžžã«åŒ·åãªè¿œå æ©èœã§ããããã«ãããã³ãŒãã®æçãåå¥ã®ãŠãããã«ãã©ããããããªããžã§ã¯ããšããŠæäœã§ããŸãã ããå€ãã®APIãiOSã§ãããã¯ã䜿çšããå¿ èŠããããããããããç解ããããšã¯éåžžã«éèŠã§ãã ãã ãããããã®æ§æãšããã€ãã®åŸ®åŠãªåŽé¢ã¯ãåå¿è ã«ãšã£ãŠãã°ãã°æ··ä¹±ãæããŸãã ããããæããããšã¯ãããŸãã-ãã®ã¬ãã¹ã³ã¯éåžžã«åœ¹ç«ã¡ãŸãã
ãã®ãã¥ãŒããªã¢ã«ã®2ã€ã®ããŒãã§ã¯ããiOS Dinerããšããå°ããªiOSãããžã§ã¯ããäœæããŸãã ã¢ããªã±ãŒã·ã§ã³èªäœã¯ç°¡åã§ãããŠãŒã¶ãŒã¯ã¡ãã¥ãŒããæçãéžæããŠããŸãã§æŒé£ãé£ã¹ãŠãããã®ããã«æ³šæãäœæããŸãã 泚æïŒåµé ã®éçšã§ãç©ºè ¹æããšã¹ã«ã¬ãŒãããŸãïŒ
æåã®éšåã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®UIãéçºããåæã«ã¹ããŒãªãŒããŒã ïŒæåéã-ã¹ããŒãªãŒããŒã-çŽPerãïŒã確èªããŸããããã«ã¯ãJSON圢åŒã§ã¡ãã¥ãŒãèªã¿èŸŒãããã®WebãµãŒãã¹ã®äœæãšäœ¿çšã«é¢ããçãã¡ã¢ãå«ãŸããŸãã
ã泚æ ã¹ããŒãªãŒããŒããšã€ã³ã¿ãŒãã§ã€ã¹ãã«ããŒãæ¢ã«åŸæãªå Žåã¯ãæåã®éšåãã¹ãããããŠããããã¯ã®äœ¿çšãéå§ãã2çªç®ã®éšåã«çŽæ¥é²ãã§ãã ããã ãã®ããŒãã§ã¯ã StoryboardãšInterface Builderã®ã¿ã«çŠç¹ãåœãŠãŸãã
2çªç®ã®éšåã§ã¯ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®ããã°ã©ãã³ã°ãéåæããŒã¿åŠçãããã¯ã°ã©ãŠã³ãã¿ã¹ã¯ãå€ãã®æšæºAPIã®ä»£æ¿ãšããŠã®äœ¿çšãªã©ããããã¯ã®å æ¬çãªäœ¿çšæ¹æ³ã瀺ããŸãã
ã¯ããã«
Xcodeãéããæ°ãããããžã§ã¯ããäœæããŸãã

ãããžã§ã¯ãã®ååã§ããiOSDinerãã瀺ããŸãã

ãããžã§ã¯ããå®è¡ããŸãã ãã¡ããããŸã 空ã§ãããã·ãã¥ã¬ãŒã¿ã«ã¯ç©ºçœã®ç»é¢ã衚瀺ãããŸãã

Deployment Infoã®ãããžã§ã¯ãèšå®ã§ã Portraitããã¯ã¹ã®ãã§ãã¯ãå€ããŸãã

æåã«è¡ãããšã¯ããã¬ãŒã³ããŒã·ã§ã³ã®ã«ã¹ã¿ãã€ãºã§ãã ãããè¡ãã«ã¯ãå°ããªã°ã©ãã£ãã¯ãå¿ èŠã§ãã ãã¡ãããããŠã³ããŒãã§ããŸãã ããããããžã§ã¯ããªãœãŒã¹ã«è¿œå ããå¿ èŠããããŸãã
æ£çŽãªãšãããxCodeããããžã§ã¯ããšãã¡ã€ã«ã·ã¹ãã ã§äžèŽãããã¡ã€ã«ãåŠçããæ¹æ³ã奜ãã§ã¯ãªãã£ãã®ã§ãéåžžããã¡ã€ã«ã·ã¹ãã ã«ãªãœãŒã¹ãæåã§è¿œå ããŸãã Finderã§ãããžã§ã¯ããã©ã«ããŒãéãããã®äžã«ããªãœãŒã¹ããã©ã«ããŒãäœæããŸãã ãã®äžã«ããImagesããã©ã«ããŒãäœæããŸãã

以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãããŠã³ããŒãããZIPãã¡ã€ã«ããç»åãImagesãã©ã«ããŒã«ã³ããŒããXcodeã§IOSDinerãã©ã«ããŒã«Resourcesãã©ã«ããŒããã©ãã°ããŸãã

ããã§ãXcodeã®Resourcesãã©ã«ããŒãèŠãããšãã§ããŸãããã®ãã©ã«ããŒã«ã¯ããã¡ã€ã«ã·ã¹ãã ãšåãããã«ãããŠã³ããŒããããç»åãå«ããµããã©ã«ããŒImagesããããŸãã
ç»åãè¿œå ãã
Main.storyboardãéããŸã ã

ã ã³ã³ãããŒã©ãŒã·ãŒã³ã®è¡šç€º ããšããååã®2çªç®ã®åã衚瀺ãããªãå Žåã¯ãäžã®[å±é ]ãã¿ã³ãã¯ãªãã¯ããŸãã
ãããã£ãŠãç»åãStoryImageã«UIImageViewsããã³UIButtonsãšããŠè¿œå ããŸã ã ç°¡åã«ããã«ã¯ã[ ãŠãŒãã£ãªãã£]ãµã€ãããŒãéãã[ ã¡ãã£ã¢ã©ã€ãã©ãª]ãéžæããŸãã

ããã«ããããžã§ã¯ãã«è¿œå ããã以åã®ãã¹ãŠã®ç»åã衚瀺ãããŸãã 確ãã«ãååçã«ã¯ååã®æ«å°Ÿã«ã@ 2xããä»ããç¬èªã®ã³ããŒãããããšã«æ°ã¥ããŸããã RetinaããŒãžã§ã³ã«äœ¿çšãããŸãã
ç§ãã¡ã¯ãã€ãã®çµµã ãã«èå³ããããŸãã ã¹ããŒã¹ããŒãã¯ãªãã¯ããŠæŒãããšã§ãç»åã®ããŒãžã§ã³ã確èªã§ããŸãã 以äžã«ç€ºãããã«ããbg_wall.pngããã«ãŒããã¥ãŒã«ãã©ãã°ããŸãã ç»åãæ£ããèšå®ãããŠãããã©ããããããªãå Žåã¯ããµã€ãºã€ã³ã¹ãã¯ã¿ãŒã«åãæ¿ããŠX座æšãšY座æšãå€æŽã§ããŸãã


次ã®ç»åã§ãåãããšãè¡ããŸãã
- person.png
- sign_theiOSdiner.png
- chalkboard.png
- bg_counter.png
- total_field.png
- food_box.png
ã泚æ Cmdãš=ããŒãåæã«æŒãããšã«ããã ç»åãã¥ãŒãç»åã®æ£ç¢ºãªãµã€ãºã«åãããããšãã§ããŸãã ãã¹ãŠã®åçãé©åãªå Žæã«é 眮ãããããããžã§ã¯ããå®è¡ããŸãã

ããïŒ ã¢ããªã®ããã«ïŒ 次ã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ããŒããè¿œå ããŸãã [ ãŠãŒãã£ãªã㣠]ããã«ã§ã[ ãªããžã§ã¯ãã©ã€ãã©ãª ]ã«åãæ¿ããŸãã
ãã¥ãŒã®äžå€®ãã¢ãã¿ãŒã®äžã«ãã¿ã³ããã©ãã°ããŸãã æ°ããè¿œå ããããã¿ã³ãããã«ã¯ãªãã¯ããŠãã-1ããå ¥åããŸãã

äžžãé·æ¹åœ¢ãã¿ã³
ãªãªãžãã«ã¯Round Rect Buttonã䜿çšããŸããããããã¯xCode 7.3.1ã«ã¯ãããŸããã Stack Overflowã«ã¯ããããã®äœ¿çšæ¹æ³ã«é¢ãããœãªã¥ãŒã·ã§ã³ããããŸãã
ãã¿ã³ã匷調衚瀺ãããŠããããšã確èªããŸãã å±æ§ã€ã³ã¹ãã¯ã¿ãŒã§ ã Backgroundå±æ§ããbutton_silver.pngãã«èšå®ããŸããAlt ããŒãæŒãããŸãŸ ã-1ãã¿ã³ãå³ã«ãã©ãã°ããŸãã ããã«ããããªããžã§ã¯ãã®ã³ããŒãäœæãããŸãã ããã¹ãã+1ã«å€æŽããŸãã


å¥ã®ãã¿ã³ãã¢ãã¿ãŒã®å·Šç«¯ã«ãã©ãã°ããŸãã Button TypeãCustomã«èšå®ãããã¿ã³ã®ã¿ã€ãã«ãåé€ããŠã ã¡ãã£ã¢ã©ã€ãã©ãªãŒãããbutton_arrow_left.pngãããã©ãã°ããŸã

ãã®ãã¿ã³ãã³ããŒããŠãèæ¯ç»åããbutton_arrow.pngãã«å€æŽããŸã

ãããŠæåŸã®ãã¿ã³ãæ®ã£ãã ããŒãã®äžã«çœ®ããèæ¯ç»åããtotal_field.pngãã«èšå®ããŸãã ãããžã§ã¯ããå®è¡ããŸãã

ããªãããã§ããã 次ã«è¿œå ããã®ã¯ãã©ãã«ãšãã¬ãã¥ãŒãŠã£ã³ããŠã§ãã
ãªããžã§ã¯ãã©ã€ãã©ãªã«å床移åããŸãã UILabelãããŒãã«ãã©ãã°ããããŒãã«åãããŠåŒã䌞ã°ããŸãã

Atrributes Inspectorã§ã Linesã0 ã«èšå®ãïŒããã«ããã©ãã«ãè€æ°è¡ã«ãªããŸãïŒã Text Colorãçœã«ã FontãMarker Felt 17.0ã«å€æŽããŸãã éåžžãMarker Feltã®äœ¿çšã¯ç¯çœªã§ãããšèããŠããŸãããç§ãã¡ã®å Žåã¯éåžžã«é©ããŠããŸãã

UIImageViewãã¢ãã¿ãŒã«ãã©ãã°ã¢ã³ãããããããŸãã

å±æ§ã€ã³ã¹ãã¯ã¿ãŒã§ã ã¢ãŒããã¢ã¹ãã¯ããã£ããã«å€æŽããŸã ã

å¥ã®UILabelãå³äžã®ãã¬ãŒãã«ãã©ãã°ããŸãã ãã¬ãŒãã®ç°è²ã®é åã®ãµã€ãºã«ããŠã AlignmentãCenterã«èšå®ããŸãã

IBOutletsããã³IBActionsãã€ã³ã¹ããŒã«ãã
次ã«ãäœæãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšã³ãŒãã®éã®é¢ä¿ã確ç«ããå¿ èŠããããŸãã ããã«ã¯ã IBOutletsãšIBActionsãå¿ èŠã§ãã IBã¯Interface Builderã®ç¥ã§ãxCodeã§UIãäœæããããã«äœ¿çšãããŸãã
- IBOutlet㯠ãåºæ¬çã«ãUIèŠçŽ ïŒãã¿ã³ãŸãã¯ã©ãã«ïŒãšã³ãŒãå ã®ãªã³ã¯ãšã®é¢ä¿ã§ãã
- IBActionã¯ãéçºãããã€ã³ã¿ãŒãã§ã€ã¹ã®ã€ãã³ãïŒãã¿ã³ã¯ãªãã¯ãªã©ïŒã«æ¥ç¶ã§ããã³ãŒãå ã®ã¢ã¯ã·ã§ã³ïŒãŸãã¯ãã䟿å©ãªã¡ãœããïŒã§ãã
IBOutletsãšIBActionsãä»ããŠUIèŠçŽ ãæ¥ç¶ããããã®ã³ãŒããäœæããŸãããã
[ ãŠãŒãã£ãªã㣠]ã¿ããéããŠã ã¢ã·ã¹ã¿ã³ããšãã£ã¿ãéããŸãã æ§ææ¹æ³ã«ãã£ãŠã¯ãã¹ã¯ãªãŒã³ã·ã§ãããã¹ã¯ãªãŒã³ã·ã§ãããšåãã«èŠããªãå ŽåããããŸãã ã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒã®è¡šç€ºãå€æŽããå Žåã¯ããã®ã¡ãã¥ãŒãèŠãŠãã ããã

ãã¿ã³ããå§ããŸãããã -1ãã¿ã³ãéžæãã CtrlããŒãæŒããªããã³ãŒãã«ãã©ãã°ããŸãã ããã«ããããã¿ã³ã®IBOutletã®äœæãèªååãããŸãã
ãã®ãªããžã§ã¯ãã«å¿ èŠãªã®ã¯ãååãä»ããããšã ãã§ãã xCodeã§ã¯ãªãŒãã³ã³ããªãŒãã«ãããã¹ãŠã®èŠçŽ ãç°¡åã«èŠã€ããããšãã§ããããããibããã¬ãã£ãã¯ã¹ã奜ãã§ãã ãã®ãªããžã§ã¯ãã«ãibRemoveItemButtonããšããååãä»ãã[ æ¥ç¶ ]ãã¯ãªãã¯ããŸã ã

æ®ãã®ãã¿ã³ã«ã€ããŠãåãããšãè¡ããŸãã




åãæ¹æ³ã§ã©ãã«ãèšå®ããŸãã



ããã§ã ViewController.mã¯æ¬¡ã®ããã«ãªããŸãã
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIButton *ibRemoveItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibAddItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibPreviousItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibNextItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibTotalOrderButton; @property (weak, nonatomic) IBOutlet UILabel *ibChalkboardLabel; @property (weak, nonatomic) IBOutlet UIImageView *ibCurrentItemImageView; @property (weak, nonatomic) IBOutlet UILabel *ibCurrentItemLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
ããã§ã UIButtonsã«IBActionsãè¿œå ããå¿ èŠããããŸã ã ãããã¯ãç¹å®ã®ã€ãã³ãïŒTouch Up InsideãTouch Up OutsideãTouch Cancelãªã©ïŒã«å¿çããŠåŒã³åºãããã¡ãœããã§ãã ãã¿ã³ã®å Žåãæãäžè¬çã«äœ¿çšãããå éšã¿ããã¢ããã
ãã¿ã³ã-1ããéžæããŸãã å床ã CtrlããŒã䜿çšããŠViewController.mã«ãã©ãã°ããŸã ã ããã¯IBActionã§ãããããibaãã¬ãã£ãã¯ã¹ã䜿çšããŸãã ãã¹ãŠã®ãã¿ã³ã«ã€ããŠç¹°ãè¿ããŸãã





WebãµãŒãã¹ãã€ã³ã¹ããŒã«ãã
ã³ãŒããéå§ããåã«ãWebãµãŒãã¹ãæ§æããŸãã ããã«ã€ããŠã¯ãã§ã«ããã€ãã®ã¬ãã¹ã³ããããŸãã®ã§ããã¹ãŠã詳ãã説æããã€ããã¯ãããŸããïŒ iOSã¢ããªçšã®ã·ã³ãã«ãªPHP / MySQL WebãµãŒãã¹ã® æžãæ¹ãšWebãµãŒãã¹ã䜿çšããiOSã¢ããªã®æžãæ¹ ïŒã
以äžã®ã³ãŒãã¯ãWebãµãŒãã¹ã®PHPã³ãŒããã©ã®ããã«ãªããã瀺ããŠããŸãã
<?php function getStatusCodeMessage($status) { $codes = Array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported' ); return (isset($codes[$status])) ? $codes[$status] : ''; } // Helper method to send a HTTP response code/message function sendResponse($status = 200, $body = '', $content_type = 'text/html') { $status_header = 'HTTP/1.1 ' . $status . ' ' . getStatusCodeMessage($status); header($status_header); header('Content-type: ' . $content_type); echo $body; } class InventoryAPI { function getInventory() { $inventory = array( array("Name"=>"Hamburger","Price"=>0.99,"Image"=>"food_hamburger.png"), array("Name"=>"Cheeseburger","Price"=>1.20,"Image"=>"food_cheeseburger.png"), array("Name"=>"Fries","Price"=>0.69,"Image"=>"food_fries.png"), array("Name"=>"Onion Rings","Price"=>0.69,"Image"=>"food_onion-rings.png"), array("Name"=>"Soda","Price"=>0.75,"Image"=>"food_soda.png"), array("Name"=>"Shake","Price"=>1.20,"Image"=>"food_milkshake.png") ); sendResponse(200, json_encode($inventory)); } } sleep(5); $api = new InventoryAPI; $api->getInventory(); ?>
ãã®WebãµãŒãã¹ã¯ãJSONé åãè¿ãéåžžã«åçŽãªPHPã¹ã¯ãªããã§ãã é åã«ã¯ãããããé£æ³é å ïŒPHPïŒããŸãã¯ãã£ã¯ã·ã§ã㪠ïŒObjective-CïŒãå«ãŸããã¢ã€ãã ã®ååãäŸ¡æ Œãç»ååãå«ãŸããŸãã äžèšã®ã³ãŒãã§æ³šæãã¹ãããšã¯ãline
sleep(5);
ã
äœéã®WebãµãŒãã¹ãã·ãã¥ã¬ãŒãããŠãéåææäœã§ãããã¯ãã©ã®ããã«åœ¹ç«ã€ãããããã瀺ãããã«äœ¿çšããŸãã
ãã®ã³ãŒããæ¡åŒµå.phpã®ãã¡ã€ã«ã«ã³ããŒããŠãã¹ãã£ã³ã°ã«é 眮ããããåã«mineã䜿çšããŸãã
次ã«ããããš
ã¬ãã¹ã³ã®ãã®éšåã®ãã©ããã¯ã ããããããŠã³ããŒãã§ããŸã ã ãŸãããããã¯ãšã¯é¢ä¿ã®ãªãããããçš®é¡ã®ãã®ããããããããŸããã ãããã ãã¥ãŒãšWebãµãŒãã¹ãã€ã³ã¹ããŒã«ããããã³ãŒãã£ã³ã°ã«é²ã¿ããããã¯ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãå®å šã«æ©èœãããããšãã§ããŸãã