æè¿ãOS X Yosemiteã¯JavaScriptã䜿çšããŠèªååããæ©èœãå°å
¥ããŸããã ããã«ãããJavaScriptãããã€ãã£ãOS X *ãã¬ãŒã ã¯ãŒã¯ã«ã¢ã¯ã»ã¹ã§ããå¯èœæ§ãåºãããŸãã ç§ã¯ãã®æ°ããäžçãé§ãåã£ãŠãããã€ãã®
äŸãéããŸããã ãã®æçš¿ã§ã¯ãåºæ¬ã説æãã
å°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããããã»ã¹ã段éçã«ç€ºã
ãŸã ã
JavaScriptã䜿çšãã
èªååã«é¢ããã»ãã·ã§ã³ãWWDC 2014ã§éå¬ãããŸããã AppleScriptã®ä»£ããã«JavaScriptã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãèªååã§ããããšãããããŸããã ããèªäœãåºæ¿çãªãã¥ãŒã¹ã§ãã AppleScriptã䜿çšããŠç¹°ãè¿ãæäœãèªååããæ©èœã¯ãããªãåããååšããŠããŸããã AppleScriptã§æžãã®ã¯æ¥œããçµéšã§ã¯ãªãã®ã§ã代ããã«äœ¿ãæ
£ããæ§æã䜿çšããããšã¯éåžžã«è¯ãã§ãããã
ãã®ã»ãã·ã§ã³äžã«ãã¹ããŒã«ãŒã¯Objective-Cãšããªããžã«ã€ããŠè©±ããŸããã ãããããæ¥œãã¿ã§ãã ããªããžã䜿çšãããšãObjective-Cãã¬ãŒã ã¯ãŒã¯ãJSã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ããŒãã§ããŸãã ããšãã°ãæšæºã®OS Xã³ã³ãããŒã«ã䜿çšããŠGUIãäœæããå Žåã¯ãCocoaãã€ã³ããŒãããå¿
èŠããããŸãã
ObjC.import("Cocoa");
Freymork
Foundationã¯ããã®ååã瀺ããšããã®ãã®ã§ãã OS Xã¢ããªã±ãŒã·ã§ã³ã®ãããã¯ãçµã¿ç«ãŠãããšãã§ããã¯ã©ã¹ãšãããã³ã«ã®èšå€§ãªã»ããããããŸãã
NSArray ã
NSURL ã
NSUserNotificationãªã© ããªãã¯ãããã®ãã¹ãŠã«ç²ŸéããŠããªããããããŸãããããããã®ååã¯ããããäœã®ããã«ãããã瀺åããŠããŸãã ãã®ãã¬ãŒã ã¯ãŒã¯ã¯éåžžã«éèŠã§ãããããæ°ããã¢ããªã±ãŒã·ã§ã³ã«ã€ã³ããŒãããå¿
èŠãªããããã©ã«ãã§ãã¬ãŒã ã¯ãŒã¯ãå©çšã§ããŸãã
ç§ã®ç¥ãéããJavaScriptã§ãObjective-CãSwiftãšåãããšãã§ããŸãã
äŸ
泚ïŒãã®äŸãæ©èœãããã«ã¯ãYosemite Developer Preview 7+ãå¿
èŠã§ãäœããåŠã¶ããã®æè¯ã®æ¹æ³ã¯ããããåãåã£ãŠäœããããããšããããšã§ãã ã³ã³ãã¥ãŒã¿ãŒã®ç»åã衚瀺ã§ããå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããããã»ã¹ã玹ä»ããŸãã
ç§ã®
ãªããžããªããå®å
šãªäŸãããŠã³ããŒãã§ã
ãŸã ã
äœæããã¢ããªã±ãŒã·ã§ã³ã®ç»é¢ãã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŠã£ã³ããŠãããã¹ããããã¯ãå
¥åãã£ãŒã«ãããã¿ã³ããããŸãã ããŠããŸãã¯ã¯ã©ã¹åïŒ
NSWindow ã
NSTextField ã
NSTextField ã
NSButton ã
ããã¡ã€ã«éžæããã¿ã³ãã¯ãªãã¯ãããšã
NSOpenPanelãéãããã¡ã€ã«ãéžæãããŸãã ãŠãŒã¶ãŒã.jpgã.pngãããã³.gif以å€ã®æ¡åŒµåãæã€ãã¡ã€ã«ãéžæã§ããªãããã«ãããã«ãæ§æããŸãã
ç»åãéžæããåŸããŠã£ã³ããŠã«è¡šç€ºããŸãã ãŠã£ã³ããŠã®ãµã€ãºã¯ãç»åã®å¹
ãšé«ããããã³ã³ã³ãããŒã«ã®é«ãã«åãããŠèª¿æŽãããŸãã ãŸããã³ã³ãããŒã«ãæ¶ããªãããã«ãæå°ãŠã£ã³ããŠãµã€ãºã瀺ããŸãã
ãããžã§ã¯ãã®ã»ããã¢ãã
Applictions> Utilitiesã§Apple Script Editor
ã¢ããªã
éããŸãã ããã¯ç§ã詊ããæé«ã®ãšãã£ã¿ãŒã§ã¯ãããŸããããä»ã§ã¯å¿
èŠã§ãã JSã§OS Xã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«å¿
èŠãªæ©èœãããã€ããããŸãã ããŒãã®äžã§äœãèµ·ãã£ãŠããã®ãã¯ããããŸãããã圌ã¯ã¹ã¯ãªãããã¢ããªã±ãŒã·ã§ã³ãšããŠã³ã³ãã€ã«ããŠå®è¡ããæ¹æ³ãç¥ã£ãŠããŸãã ãŸããInfo.plistãã¡ã€ã«ãªã©ã远å ã®å¿
èŠãªãã®ãäœæããŸãã ä»ã®ç·šéè
ã«åãããšã匷å¶ããæ©äŒãããããã«æããŸãããç§ã¯ãŸã ãããçè§£ããŠããŸããã
File> NewãŸãã¯
cmd + nã§æ°ããããã¥ã¡ã³ããäœæããŸãã æåã«è¡ãå¿
èŠãããã®ã¯ãããã¥ã¡ã³ããã¢ããªã±ãŒã·ã§ã³ãšããŠä¿åããããšã§ãã
File> SaveãŸãã¯
cmd + sã§ ä¿åããŸã ã äžåºŠã«æ¥ãã§ä¿åããªãã§ãã ããã ãããžã§ã¯ããã¢ããªã±ãŒã·ã§ã³ãšããŠå®è¡ããããã«å¿
èŠãª2ã€ã®èšå®ããããŸãã
å¿
èŠãªèšå®ãåããã¹ã¯ãªãããšãã£ã¿ãŒãã©ãŒãããããã¢ããªã±ãŒã·ã§ã³ãã«å€æŽãããéããªããããã¯ã¹ã«ãã§ãã¯ãå
¥ããŸã**
éèŠãªæ³šæïŒãããã®èšå®ã¯å€æŽã§ããŸãã[ãã¡ã€ã«]ã¡ãã¥ãŒãéãããªãã·ã§ã³ãã¿ã³ãæŒãç¶ããŸãã ããã«ããããååãä»ããŠä¿å...ãã¢ã€ãã ãéããŸãã ä¿åãã€ã¢ãã°ã§ãèšå®ã倿Žã§ããŸãã ãããããããžã§ã¯ããäœæãããšãã¯ããã«ãããè¡ãæ¹ãè¯ãã§ãã[éããªã]ãã§ãã¯ããã¯ã¹ããªã³ã«ããªããšãã¢ããªã±ãŒã·ã§ã³ãéããããã«éããŸãã ã€ã³ã¿ãŒãããäžã®ãã®æ©èœã«é¢ããããã¥ã¡ã³ãã¯ã»ãšãã©ãããŸããã ããŒããŒãã§é¡ãå©ããŠæ°æéåŸã«ãã®ããšãç¥ããŸããã
ãã§ã«äœããããŸãããïŒ
次ã®è¡ãã¹ã¯ãªããã«è¿œå ãã
Script> Run ApplicationãŸãã¯
cmd + rã䜿çšããŠãã¹ãŠã
å®è¡ããŸãã
ObjC.import("Cocoa"); $.NSLog("Hi everybody!");
ã»ãšãã©äœãèµ·ãããŸããã§ããã 衚瀺ããã倿Žã¯ãã¡ãã¥ãŒããŒãšããã¯ã®ã¿ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ååãšé
ç®Fileããã³Editãã¡ãã¥ãŒããŒã«è¡šç€ºãããŸããã ã¢ã€ã³ã³ãããã¯ã«ãããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããããšãããããŸãã
ãããã«ã¡ã¯ãã¿ãªããïŒããšããè¡ã¯ã©ãã«ãããŸããïŒ ãŸããjQueryã®ãã«èšå·ãšã¯äœã§ããïŒ
File> QuitãŸãã¯
cmd + qã§ã¢ããªã±ãŒã·ã§ã³ãéããŠããã®NSLogãçºçããå ŽæãèŠã€ããŸãããã
ã³ã³ãœãŒã«ãéã
ãŸã ïŒ
ã¢ããªã±ãŒã·ã§ã³>ãŠãŒãã£ãªãã£>ã³ã³ãœãŒã« ã åã¢ããªã±ãŒã·ã§ã³ã¯ãã³ã³ãœãŒã«ã«äœããæžã蟌ãããšãã§ããŸãã ChromeãSafariãFirefoxã®éçºè
ããŒã«ãšå€§å·®ãããŸããã äž»ãªéãã¯ããµã€ãã§ã¯ãªãã¢ããªã±ãŒã·ã§ã³ããããã°ããŠããããšã§ãã
å€ãã®ã¡ãã»ãŒãžããããŸãã å³äžé
ã®æ€çŽ¢ããŒã«ãã¢ãã¬ããããšæžãããšã§ãã£ã«ã¿ãªã³ã°ããŸãã ã¹ã¯ãªãããšãã£ã¿ãŒã«æ»ãã
opt + cmd + rã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãå床å®è¡ããŸãã

èŠãŸãããïŒïŒ ãããã«ã¡ã¯ãã¿ãªããïŒããšããã¡ãã»ãŒãžãã³ã³ãœãŒã«ã«è¡šç€ºãããŸãã ååšããªãå Žåã¯ãã¢ããªã±ãŒã·ã§ã³ãéããŠå床å®è¡ããŸãã äœåãéããã®ãå¿ããŠãã³ãŒããèµ·åããŸããã§ããã
ãã«èšå·ã¯ã©ãã§ããïŒ
ãã«èšå·ã¯ãObjective-Cã®ããªããžãžã®ã¢ã¯ã»ã¹ã§ãã Objective-Cã¯ã©ã¹ãŸãã¯å®æ°ã«ã¢ã¯ã»ã¹ããå¿
èŠããããã³ã«ã
$ .fooãŸãã¯
ObjC.fooã䜿çšããå¿
èŠããããŸãã åŸã§
$ã䜿çšããä»ã®æ¹æ³ã«ã€ããŠèª¬æããŸãã
ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãšNSLogã¯ããããã®ãªããã®ã§ãããåžžã«ãããã°ã«äœ¿çšããŸãã æåå以å€ã®ãã°ãèšé²ããæ¹æ³ã«ã€ããŠã¯ã
NSLogã®äŸãã芧ãã ããã
ãŠã£ã³ããŠãäœæãã
ããåããããŸãããã ã³ãŒãã远å ããŸãã
ObjC.import("Cocoa"); var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask; var windowHeight = 85; var windowWidth = 600; var ctrlsHeight = 80; var minWidth = 400; var minHeight = 340; var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, windowWidth, windowHeight), styleMask, $.NSBackingStoreBuffered, false ); window.center; window.title = "Choose and Display Image"; window.makeKeyAndOrderFront(window);
次ã«ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
opt + cmd + r 話ããŸãããïŒ å°éã®ã³ãŒãã§ãç§»åãæå°åãããã³éããããšãã§ããã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã
JSã䜿çšããŠäœæãããã·ã³ãã«ãªNSWindowãŠã£ã³ããŠç§ã®ããã«ãObjective-CãCocoaã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããå¿
èŠããªãã£ãå Žåãããã¯å°ãããããèŠãããããããŸããã ã¡ãœããåã®é·ãã¯ãã®ããã«æããŸããã ããããããååã奜ãã§ãããCocoaã¯è¡ãéãã§ãã
ãã ããããã¯JavaScriptã§ãã ã³ãŒãã¯ãWebãµã€ããäœæããŠããããã«èŠããŸãã
styleMaskå€ãèšå®ããæåã®è¡ã§äœãèµ·ãããŸããïŒ ã¹ã¿ã€ã«ãã¹ã¯ã¯ããŠã£ã³ããŠãã«ã¹ã¿ãã€ãºããããã«äœ¿çšãããŸãã åãªãã·ã§ã³ã¯ã远å ããå
容ã瀺ããŸãã ã¿ã€ãã«ãéãããã¿ã³ãæå°åãã¿ã³ã ãããã®ãªãã·ã§ã³ã¯å®æ°ã§ãã ãããåäœãŸãã¯ïŒ "|"ïŒã䜿çšããŠãããèšå®ãå¥ã®èšå®ããåé¢ããŸãã
å€ãã®ãªãã·ã§ã³ããããŸãã ãããã«ã€ããŠã¯ãã¹ãŠ
ããã¥ã¡ã³ãã§èªãããšãã§ã
ãŸã ã
NSResizableWindowMaskã远å ããŠãäœãèµ·ãããã確èªããŠãã ããã
æ§æã«é¢ããããã€ãã®è峿·±ãããšãèŠããŠããå¿
èŠããããŸãã
$ .NSWindow.allocã¯ã
NSWindowãªããžã§ã¯ãã®
allocã¡ãœããã
åŒã³åºããŸãã ã¡ãœãããåŒã³åºããåŸã¯æ¬åŒ§ããããŸããã JavaScriptã§ã¯ãããã«ããã¡ãœããã§ã¯ãªãããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã ã©ãïŒ OS Xã®JSã§ã¯ããã©ã±ããã¯ãã©ã¡ãŒã¿ãŒãæž¡ãå Žåã«ã®ã¿èš±å¯ãããŸãã åŒæ°ãªãã§æ¬åŒ§ã䜿çšããããšãããšãå®è¡æãšã©ãŒãçºçããŸãã åé¡ãçºçããå Žåã¯ãã³ã³ãœãŒã«ã§ãšã©ãŒã確èªããŠãã ããã
以äžã¯ãè¶
é·ã¡ãœããåã®äŸã§ãã
initWithContentRectStyleMaskBackingDefer
NSWindowã®
ããã¥ã¡ã³ãã§ã¯ããã®ã¡ãœããã¯å°ãç°ãªããŸãã
initWithContentRect:styleMask:backing:defer:
Objective-Cã§ã¯ããã®ãããªãŠã£ã³ããŠã¯æ¬¡ã®æ¹æ³ã§äœæãããŸãã
NSWindow* window [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, windowWidth, windowHeight) styleMask: styleMask, backing: NSBackingStoreBuffered defer: NO ];
ã¡ãœããã®å
ã®èª¬æã®ã³ãã³ïŒ "ïŒ"ïŒã«æ³šæããŠãã ããã JSã§Objective-Cã¡ãœããã䜿çšããã«ã¯ãããããåé€ããæ¬¡ã®æåã倧æåã«çœ®ãæããå¿
èŠããããŸãã è§æ¬åŒ§ïŒ "[]"ïŒã¯ãã¯ã©ã¹/ãªããžã§ã¯ãã¡ãœããã®åŒã³åºãã§ãã
[NSWindow alloc]ã¯ã
NSWindowã¯ã©ã¹ã®
allocã¡ãœãããåŒã³åºããŸãã JSã§ã¯ãããã¯
NSWindow.allocã«çžåœããå¿
èŠã«å¿ããŠè§ãã£ãã远å ããŸãã
æ®ãã®ã³ãŒãã¯éåžžã«ã·ã³ãã«ã ãšæããŸãã 圌女ã®è©³çްãªèª¬æãæããã§ãã æ¬¡ã«äœãèµ·ããããçè§£ããã«ã¯ãå€ãã®æéãå¿
èŠãšããå€ãã®ããã¥ã¡ã³ããèªãå¿
èŠããããŸããããããåŠçã§ããŸãã ãŠã£ã³ããŠã衚瀺ãããŠããå Žåãããã¯ãã§ã«çŽ æŽãããã§ãã ä»ã®ããšãããŸãããã
ã³ã³ãããŒã«ã远å ãã
ã©ãã«ãããã¹ãããã¯ã¹ããã¿ã³ãå¿
èŠã§ãã
NSTextFieldãš
NSButtonã䜿çšããŸãã ã³ãŒããæŽæ°ããŠãã¢ããªã±ãŒã·ã§ã³ãå床å®è¡ããŸãã
ObjC.import("Cocoa"); var styleMask = $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask; var windowHeight = 85; var windowWidth = 600; var ctrlsHeight = 80; var minWidth = 400; var minHeight = 340; var window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, windowWidth, windowHeight), styleMask, $.NSBackingStoreBuffered, false ); var textFieldLabel = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 40), 200, 24)); textFieldLabel.stringValue = "Image: (jpg, png, or gif)"; textFieldLabel.drawsBackground = false; textFieldLabel.editable = false; textFieldLabel.bezeled = false; textFieldLabel.selectable = true; var textField = $.NSTextField.alloc.initWithFrame($.NSMakeRect(25, (windowHeight - 60), 205, 24)); textField.editable = false; var btn = $.NSButton.alloc.initWithFrame($.NSMakeRect(230, (windowHeight - 62), 150, 25)); btn.title = "Choose an Image..."; btn.bezelStyle = $.NSRoundedBezelStyle; btn.buttonType = $.NSMomentaryLightButton; window.contentView.addSubview(textFieldLabel); window.contentView.addSubview(textField); window.contentView.addSubview(btn); window.center; window.title = "Choose and Display Image"; window.makeKeyAndOrderFront(window);
ãã¹ãŠãããŸãããã°ãã³ã³ãããŒã«ã®ãããŠã£ã³ããŠãã§ããŸããã ãã£ãŒã«ãã«äœãå
¥åããããšã¯ã§ããããã¿ã³ã¯äœãããŸããããã¡ãã£ãšåŸ
ã£ãŠãã ããããã§ã«åé²ããŠããŸãã
ãŠã£ã³ããŠã³ã³ãããŒã«ããã§äœãããŸãããïŒ
textFieldLabelãš
textFieldã¯äºãã«äŒŒãŠããŸãã ã©ã¡ãã
NSTextFieldã®ã€ã³ã¹ã¿ã³ã¹ã§ãã ãŠã£ã³ããŠãäœæããã®ãšåãæ¹æ³ã§äœæããŸããã
initWithFrameãš
NSMakeRectã衚瀺ãããå Žåãã»ãšãã©ã®å ŽåãUIèŠçŽ ãããã«äœæãããŠããŸãã
NSMakeRectã¯ããã®ååã§ã¬ã³ããªã³ã°ãããããšãè¡ããŸãã æå®ããã座æšãšå¯žæ³ã§é·æ¹åœ¢ãäœæããŸãã
ïŒxãyãå¹
ãé«ãïŒ ã ããã«ãããObjective-Cã§ãæ§é ããšåŒã°ãããã®ãäœæãããŸãã JSã§ã¯ãåçã®ãã®ã¯ãªããžã§ã¯ããããã·ã¥ããŸãã¯èŸæžã§ããå¯èœæ§ããããŸãã ããŒãšå€ã®ãã¢ã
ããã¹ããã£ãŒã«ããäœæããããããã€ãã®ããããã£ãããããèšå®ããŠãç®çã®çµæãååŸããŸãã Cocoaã«ã¯ãhtmlã©ãã«èŠçŽ ã®ãããªãã®ã¯ãããŸããã ããã§ã¯ãèæ¯ãšç·šéæ©èœããªãã«ããŠãã ããã
ããã¹ãããã¯ã¹ãããã°ã©ã ã§èšå®ããåæã«ç·šéãç¡å¹ã«ããŸãã ãããå¿
èŠãªããã°ã1è¡ã§ç®¡çã§ããŸãã
ãã¿ã³ãäœæããã«ã¯ã
NSButtonã䜿çšã
ãŸã ã ããã¹ãããã¯ã¹ãšåæ§ã«ãæ§é ãå¿
èŠã§ãã ããããã£ã«ã¯ã
bezelStyleãš
buttonTypeã® 2ã€ããããŸãã äž¡æ¹ã®å€ã¯å®æ°ã§ãã ãããã®ããããã£ã¯ãèŠçŽ ã®æç»æ¹æ³ãšèŠçŽ ã®ã¹ã¿ã€ã«ã決å®ããŸãã
NSButtonã®ãã®ä»ã®
æäœã«ã€ããŠã¯ã
NSButtonã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãŸã
ãããŸããŸãªã¹ã¿ã€ã«ãšåäœäžã®ãã¿ã³ã®ã¿ã€ãã瀺ã
äŸããããŸãã
ããã§è¡ã£ãŠããæåŸã®æ°ããããšã¯ã
addSubViewã䜿çšããŠãŠã£ã³ããŠã«èŠçŽ ã远å ããããš
ã§ã ã ã䜿çšããŠãããæåã«è©Šã¿ããšã
window.addSubview(theView)
NSViewã§äœæããä»ã®æšæºãã¥ãŒã§ã¯ãããã¯
æ©èœããŸããã
NSWindowã€ã³ã¹ã¿ã³ã¹ã§ã¯
æ©èœããŸããã çç±ã¯
ããããŸãããã
windowsã®
contentViewã«èŠçŽ ã远å ããå¿
èŠããã
ãŸã ã ããã¥ã¡ã³ãã«ã¯ãããŠã£ã³ããŠéå±€ã§äœ¿çšå¯èœãªæäžäœã®NSViewããšãããŸãã ããã¯ç§ã®ããã«åããã
ãã¿ã³ãæ©èœããã
ãç»åã®éžæããã¿ã³ãã¯ãªãã¯ãããšãã³ã³ãã¥ãŒã¿ãŒäžã®ãã¡ã€ã«ã衚瀺ããããã«ãéããŸãã ãã®åã«ããã¿ã³ãã¯ãªãã¯ãããšãã«ã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžã远å ããŠãŠã©ãŒã ã¢ããããŸãããã
JSã§ã¯ãã¯ãªãã¯ãåŠçããããã«ã€ãã³ããã³ãã©ãŒãèŠçŽ ã«ã¢ã¿ãããããŸãã Objective-Cã¯ããããã«ç°ãªãæŠå¿µã䜿çšããŠããŸãã ã¡ãã»ãŒãžã³ã°***ãšåŒã°ãããã®ã䜿çšããŸãã ã€ãŸããã¡ãœããã®ååãå«ãã¡ãã»ãŒãžããªããžã§ã¯ãã«æž¡ããŸãã ãªããžã§ã¯ãã«ã¯ããã®ãããªã¡ãã»ãŒãžãåãåã£ããšãã«äœããã¹ããã«ã€ããŠã®æ
å ±ãå¿
èŠã§ãã ããã¯æãæ£ç¢ºãªèª¬æã§ã¯ãªããããããŸããããç§ã¯çè§£ããŠããŸãã
æåã«ããã¿ã³ã«
ã¿ãŒã²ãããš
ã¢ã¯ã·ã§ã³ãèšå®ããå¿
èŠããããŸãã
ã¿ãŒã²ããã¯ã
ã¢ã¯ã·ã§ã³ã«å«ãŸããã¡ãã»ãŒãžã®éä¿¡å
ã®ãªããžã§ã¯ãã§ãã æç¢ºã«ãªã£ãŠããªãå Žåã¯ã次ã«é²ãã§ãã ãããã³ãŒããèŠãã°ããã¹ãŠãçè§£ã§ããŸãã ãã¿ã³ãæ§æãããŠããã¹ã¯ãªããã®éšåãæŽæ°ããŸãã
... btn.target = appDelegate; btn.action = "btnClickHandler"; ...
appDelegateãš
btnClickHandlerã¯ãŸã ååšããŸããã ããããäœããªããã°ãªããŸããã æ¬¡ã®ã³ãŒãã§ã¯ãé åºãéèŠã§ãã æ°ããã³ãŒããã©ãã«ãããã瀺ãã³ã¡ã³ãã远å ããŸããã
ObjC.import("Cocoa");
ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã¿ã³ãã¯ãªãã¯ããŠã³ã³ãœãŒã«ãèŠãŠãã ããã ãã¿ã³ãã¯ãªãã¯ãããšããClickedïŒãã¡ãã»ãŒãžã衚瀺ãããŸããïŒ ãããããªããããã¯ãã ã®ãžã£ãŒã¯ã§ãããïŒ ããã§ãªãå Žåã¯ãã³ã³ãœãŒã«ã§ã³ãŒããšãšã©ãŒã確èªããŠãã ããã
ç¶æ¿
ObjC.registerSubclassãšã¯
äœã§ããïŒ ç¶æ¿ã¯ãå¥ã®Objective-Cã¯ã©ã¹ãç¶æ¿ããæ°ããã¯ã©ã¹ãäœæããæ¹æ³ã§ãã åæ
çãªäœè«ïŒããã§ãç§ãééã£ãçšèªã䜿çšããå¯èœæ§ããããŸãã ç§ãšæŠãã
registerSubclassã¯1ã€ã®åŒæ°ãåããŸãïŒæ°ãããªããžã§ã¯ãã®ããããã£ãå«ãJSãªããžã§ã¯ãã ããããã£ã«ã¯ã
name ã
superclass ã
protocols ã
propertiesããã³
methodsããã
ãŸã ã ãããå®å
šãªãªã¹ããã©ããã¯100ïŒ
ããããŸããããããã¯
ãªãªãŒã¹ããŒãã«èšèŒãããŠã
ãŸã ã
ããã¯ãã¹ãŠé 調ã§ãããããã§äœãããŸãããïŒ ã¹ãŒããŒã¯ã©ã¹ãæå®ããªãã£ãããã
NSObjectããç¶æ¿ããŸãã ããã¯ãã»ãšãã©ã®Objective-Cã¯ã©ã¹ã®åºæ¬ã¯ã©ã¹ã§ãã nameããããã£ã«ãããä»åŸ
$ãŸãã¯
ObjCãä»ããŠæ°ããã¯ã©ã¹ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
$ .AppDelegate.alloc.init; ã¯ã©ã¹
AppDelegateã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ç¹°ãè¿ããŸãããåŒæ°ãæž¡ããªãããã
allocã¡ãœãããš
initã¡ãœããã®åŒã³åºãã®æ¬åŒ§ã¯äœ¿çšãããªãããšã«æ³šæããŠãã ããã
çžç¶äººã®æ¹æ³
ã¡ãœããã¯ãä»»æã®æåååãå²ãåœãŠãããšã«ããäœæãããŸãã ããšãã°ã
btnClickHandler ã
åãš
å®è£
ããããã£ãæã€ãªããžã§ã¯ããæž¡ããŸãã typesé
åã«å«ãŸããã¹ããã®ã«é¢ããå
¬åŒããã¥ã¡ã³ãã¯èŠã€ãããŸããã§ããã 詊è¡é¯èª€ãéããŠãç§ã¯ãããæ¬¡ã®ããã«èŠããããšã«æ°ä»ããŸããã
["return type", ["arg 1 type", "arg 2 type",...]]
btnClickHandlerã¯äœã
è¿ããªããããæåã®èŠçŽ ã¯ç¡å¹ã«ãªããŸãã 1ã€ã®ãã©ã¡ãŒã¿ãŒãã¡ãã»ãŒãžãéä¿¡ãããªããžã§ã¯ããå¿
èŠã§ãã ç§ãã¡ã®ã±ãŒã¹ã§ã¯ã
NSnãšåŒã°ãã
NSButtonã䜿çšããŸããã ã¿ã€ãã®å®å
šãªãªã¹ãã¯
ããã§å©çšå¯èœ
ã§ã ã
å®è£
ã¯éåžžã®æ©èœã§ãã ãã®äžã«JavaScriptãèšè¿°ããŸãã ãªããžã§ã¯ãã®å€éšãšåãããã«
$ã«ã¢ã¯ã»ã¹ã§ããŸãã ãŸãã颿°ã®å€éšã§å®£èšããã倿°ã䜿çšã§ããŸãã
ãããã³ã«ã®äœ¿çšã«é¢ããã¡ãã£ãšããæ³šæ
Cocoaãããã³ã«ãããµãã¯ã©ã¹ãç¶æ¿ã§ããŸãããèœãšã穎ããããŸãã
ãããã³ã«é
åã䜿çšãããšãã¹ã¯ãªããããšã©ãŒãªãã§åçŽã«ã¯ã©ãã·ã¥ããããšãããããŸããã
äŸãšèª¬æãæžã
ãã®ã§ããããã䜿ã£ãŠäœæ¥ãããå Žåã¯ããããèªãã§ãã ããã
ç»åã®éžæãšè¡šç€º
ããã«ãéããŠãç»åãéžæããŠè¡šç€ºããæºåãã§ããŸããã æ©èœã³ãŒãã®æŽæ°
btnClickHandler: ... implementation: function (sender) { var panel = $.NSOpenPanel.openPanel; panel.title = "Choose an Image"; var allowedTypes = ["jpg", "png", "gif"];
æåã«ã
NSOpenPanelã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãã¡ã€ã«ãéžæãããããã®ãã¡ã€ã«ãä¿åããå Žæãéžæããããšãããå Žåãããã«ãåäœããŠããã®ãèŠãŸããã
ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªã®ã¯ãç»åã衚瀺ããããšã ãã§ãã
allowedFileTypesããããã£ã䜿çšãããšãããã«ã§éžæã§ãããã¡ã€ã«ã®çš®é¡ã決å®ã§ããŸãã
NSArrayåã®å€ãåããŸãã æå¹ãªåã§JSé
åãäœæããŸãããããã§ã
NSArrayã«å€æããå¿
èŠããããŸãã ããã¯æ¬¡ã®ããã«è¡ãããŸãïŒ
$ïŒallowdTypesïŒ ã ããã¯ãããªããžã䜿çšããå¥ã®æ¹æ³ã§ãã ãã®ã¡ãœããã䜿çšããŠãJSå€ãObjective-Cã«å€æããŸãã éã®æäœã¯
$ïŒObjCThingïŒ.jsã®ããã«è¡ãããŸãã
panel.runModalã䜿çšããŠããã«ã
éããŸãã ã³ãŒãã®å®è¡ã¯äžæåæ¢ããŠããŸãã [
ãã£ã³ã»ã« ]ãŸãã¯
[éã ]ãã¯ãªãã¯ãããšãããã«ã¯å€ãè¿ããŸãã
[éã ]ãã¿ã³ãæŒããšã宿°
$ .NSOKButtonã
è¿ãããŸãã
panel.URLsã«é¢ããæ¬¡ã®
ã³ã¡ã³ãã¯éåžžã«éèŠã§ãã JSã§ã¯ãé
åå€ãžã®ã¢ã¯ã»ã¹ã¯æ¬¡ã®ããã«è¡ãããŸãïŒ
array [0] ã URLã¯
NSArrayåã§ãããããè§æ¬åŒ§ã䜿çšã§ããŸããã 代ããã«ã
objectAtIndexã¡ãœããã䜿çšããŸãã çµæã¯åãã«ãªããŸãã
ç»åURLãååŸããåŸã
NSImageã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæã§ã
ãŸã ã ãã¡ã€ã«URLã䜿çšããŠç»åãäœæããæ¹æ³ã¯åºãæ®åããŠãããããããã«ã¯äŸ¿å©ãªæ¹æ³ããããŸãã
initByReferencingFile
NSImageViewã¯ãä»ã®UIèŠçŽ ã®äœæã«äœ¿çšããã®ãšåãæ¹æ³ã§äœæãããŸãã
imgViewã¯ç»åã®è¡šç€ºãå¶åŸ¡ããŸãã
ãŠã£ã³ããŠã®ãµã€ãºãç»åã®å¹
ãšé«ãã«åãããŠèª¿æŽããå¿
èŠããããŸãããé«ã/å¹
ã®äžéãç¶æããå¿
èŠããããŸãã ãŠã£ã³ããŠã®ãµã€ãºã倿Žããã«ã¯ã
setFrameDisplayã䜿çšã
ãŸã ã
ãããã£ãŠã
imageViewã®ç»åãèšå®ãããŠã£ã³ããŠã«è¿œå ããŸããã å¹
ãšé«ãã倿ŽãããŠããããããŠã£ã³ããŠãäžå€®ã«é
眮ããå¿
èŠããããŸãã
ãããŠãããã«å°ããªã¢ããªã±ãŒã·ã§ã³ããããŸãã ããã€ãã®ãã¡ã€ã«ãéããŠãã ããã ãããŠãã¯ããã¢ãã¡ãŒã·ã§ã³GIFãæ©èœããã®ã§ãå¿ããªãã§ãã ããã
ãããããã¥ãŒã¹
ãããŸã§ãã¢ããªã±ãŒã·ã§ã³ã
opt + cmd + rã§å®è¡ããŸãã ã ãã ããã¢ã€ã³ã³ãããã«ã¯ãªãã¯ããŠéåžžã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
ã¢ã€ã³ã³ãããã«ã¯ãªãã¯ããŠãã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã¢ã€ã³ã³ã¯ã
/Contents/Resources/applet.icnsã眮ãæããããšã§å€æŽã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ãã¢ã€ã³ã³ãå³ã¯ãªãã¯ããŠ[ããã±ãŒãžã®å
容ã衚瀺]ãéžæããŸãã
ã©ãããŠãããªã«è奮ããã®
ç§ã¯å€§ããªå¯èœæ§ããããšæãããã§ãã ãããçç±ã§ãã Yosemiteãç»å Žãããšã誰ã§ã座ã£ãŠãã€ãã£ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã ãããŠãæãäžè¬çãªããã°ã©ãã³ã°èšèªã®1ã€ã䜿çšããŠãããè¡ãããšãã§ããŸãã ããŠã³ããŒããããã€ã³ã¹ããŒã«ãããããå¿
èŠã¯ãããŸããã å¿
èŠãªãå Žåã¯ãXcodeãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããã ãšã³ããªãŒã®ãããå€ã¯å€§å¹
ã«åæžãããŸãã ããã¯ä¿¡ããããªãã§ãã
OS Xçšã®ã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ãã²ããŸãããŠã¹ã¯ãªãããæžããããã¯ããã«æ·±ãããã»ã¹ã§ããããšãç¥ã£ãŠããŸãã JavaScriptãMacã®éçºãéå§ããããã®äºå®äžã®æšæºã«ãªããšããå¹»æ³ã¯ãããŸããã ããã¯ãéçºè
ãèªåèªèº«ãä»ã®äººã
ã®éçºã容æã«ããå°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããã®ã«åœ¹ç«ã€ãšä¿¡ããŠããŸãã ããŒã ã«ã¯ãã³ãã³ãã©ã€ã³ã§ã®äœæ¥ãé£ãããšæãã人ãããŸããïŒ ã¯ã€ãã¯GUIãäœæããŸãã æ§æããã°ãããŸãã¯èŠèŠçã«äœæãŸãã¯å€æŽããæ¹æ³ãå¿
èŠã§ããïŒ ãã®ããã®å°ããªã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
ä»ã®èšèªã«ããããã®æ©èœããããŸãã PythonãšRubyã¯åããã€ãã£ãAPIã«ã¢ã¯ã»ã¹ã§ãã人ã
ã¯ãããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ãã ããããã«JavaScriptã䜿çšããããšã¯ç°ãªããŸãã ããã«ããããã¹ãŠãéããŸã«ãªããŸãã ãŠã§ãéçºã®DIYã®ååãããã¹ã¯ãããã®äžã§ã®éçºã®æãããã¯ããŠããããã«ã ã¢ããã«ã¯ãã¢ã®ããã¯ãè§£é€ãããŸãŸã«ããŸããã
翻蚳è
ã®ã¡ã¢ïŒ*-ãã€ãã£ããããšãã°ãHTML5ã¢ããªã±ãŒã·ã§ã³ãšåŸæ¥ã®
**-ãã³ãã©ãŒã®å®è¡åŸã¯éãããŸãŸã«ããŸããã¹ã¯ãªãããšãã£ã¿ãŒã®ãã·ã¢èªçã§ã®ã»ããã¢ããã®ååãããããªã
***-ã¡ãã»ãŒãžã®åãæž¡ã