반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

오늘은 jQuery Mobile DOC의 Components 부분을 정리하겠습니다.


Components 섹션에는 아래와 같은 6개의 주제가 있습니다.


-Pages & dialogs

- Toolbars

- Buttons

- Content formatting

- Form elements

- List views


그리고 첫번째 Pages & Dialog 부분은 아래 메뉴로 구성돼 있습니다.


- Anatomy of a page
  Single page template
  Multi-page template
- Page titles
- Linking pages
- Dialogs
- Prefetching @ caching pages
- Ajax, hashes & history
- Dynamically injection pages
- Scripting pages
- PhoneGap apps
- touchOverflow feature
- Theming pages


그럼 첫번째 주제인 Anatomy of a page를 정리하겠습니다.


JQuery Mobile은 back button history support, animated 된 화면 전환 그리고 Dialog 같은 페이지를 포현하기 위한 간단한 툴들과 함께 external page들의 자동 AJAX page loading 을 지원합니다.


Anatomy of a page


JQuery Mobile 의  "page" structure는 single 페이지나 페이지 내의 local internal linked "pages"를 모두 지원합니다.

이 모델의 goal은 개발자들이 웹사이트를 손쉽게 생성할 수 있도록 하는 겁니다. 간단하게 특별한 configuration 없이 보기 좋은 화면과 native 와 유사한 화면 등 일반 HTTP 가 할 수 없는 일을 JQuery Mobile이 지원하는 겁니다.


Mobile page structure


JQuery Mobile site는 반드시 HTML5의 doctype으로부터 시작해야 합니다. 이렇게 해야 이 프레임워크의 모든 기능을 사용하실 수 있습니다. (구형버전의 브라우저가 있는 구형 디바이스는 HTML5가 적용이 안되며 이 브라우저에서는 그냥 HTML5의 doctype을 무시하고 진행하게 됩니다. 그리고 다른 다양한 custom 속성들도 적용안되고 그냥 무시할 겁니다.)
head 에서는 jQuery,jQuery Mobile 그리고 Mobile theme CSS 를 참조합니다. 이것들을 참조하면서 JQuery Mobile 이 지원하는 모든 기능을 사용할 수 있게 됩니다. jQuery Mobile 1.1 은 1.6.4와 1.7.1 버전의 jQuery core를 모두 지원합니다. 가장 효과적인 퍼포먼스를 위해서는jQuery CDN을 link 해서 사용할 것을 권장합니다.


<!DOCTYPE html>
<html>
 <head>
 <title>Page Title</title>
 
 <meta name="viewport" content="width=device-width, initial-scale=1">

 <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
 <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
 <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>

<body>
...content goes here...
</body>
</html>


Viewport meta tag


위의 소스를 보면 head 안에 meta viewport 태그가 있는 것을 보실 수 있을 겁니다. 이것은 브라우저의 page zoom과 dimension을 display 하기 위한 것입니다. 이것이 없으면 대부분의 모바일 브라우저에서는 900픽셀 정도의 virtual 페이지를 사용하게 될 겁니다. (이것은 데스크탑에는 어느정도 맞겠지만 모바일에서는 표현하기가 너무 클 럽니다.) 이 viewport 속성을 content="width=device-width, initial-scale=1"로 세팅하면 스크린의 크기에 맞춰서 width 가 display 될 겁니다.


<meta name="viewport" content="width=device-width, initial-scale=1">


이 세팅은 유저가 페이지를 zoom 하는 것을 막지는 않습니다. 이것과 관련해서 iOS에서는 작은 이슈가 있습니다. 이 viewport 세팅으로는 화면의 orientation이 바뀔 때 제대로 딱 맞게 동작을 하지 않습니다. 이 이슈는 조만간 해결 될 것이라고 기대합니다. 만약에 zoom 기능을 막으려면 viewport 에서 설정을 할 수가 있습니다.


Inside the body: Pages


<body> 태그 안에는 각각이 view 나  "page" 는 element를 통해서 정의 됩니다. (대개 div를 사용합니다.) 그리고 data-role="page"라는 속성을 사용합니다

. 페이지에서 사용할 수 있는 가능한 속성들을 보시려면 data-attribute reference를 보세요.


<div data-role="page">
 ...
</div>


"page" 콘테이너 안에는 일반적인 HTML markup 이 사용될 수 있습니다. 특히 jQuery Mobile에서는 "page" 내부에는 data-role이 header, content, footer로 정위된 div들이 들어가게 됩니다.


<div data-role="page">
 <div data-role="header">...</div>
 <div data-role="content">...</div>
 <div data-role="footer">...</div>
</div>


Putting it together: Basic single page template


위에서 설명한 모든 것을 모아 놓은 예제를 보여드리겠습니다. 이것은 여러분이 프로젝트를 하게 되면 반드시 사용해야 되는 표준 탬플릿 입니다.


<!DOCTYPE html>
<html>
 <head>
 <title>Page Title</title>
 
 <meta name="viewport" content="width=device-width, initial-scale=1">

 <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
 <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
 <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>
<body>

<div data-role="page">

 <div data-role="header">
  <h1>Page Title</h1>
 </div><!-- /header -->

 <div data-role="content"> 
  <p>Page content goes here.</p>  
 </div><!-- /content -->

 <div data-role="footer">
  <h4>Page Footer</h4>
 </div><!-- /footer -->
</div><!-- /page -->

</body>
</html>




이 화면은 jQuery Mobile에서 제공하는 Single Page Template 화면입니다.


Multi-page template structure


하나의 HTML 문서는 여러개의 "pages"를 가지고 있을 수 있습니다. 이것은 data-role 을 page로 한 여러개의 div를 사용해서 함께 로드되게 됩니다. 각각의 'page' 단위들은 unique 한 id 가 필요합니다. (id="foo") 이것은 pages들 끼리 내부적으로 링크 연결되는데 사용됩니다. (href="foo") 그 링크가 클릭되면 프레임워크는 내부 page의 ID를 찾게 됩니다. 그리고 그 페이지를 보여줍니다.
아래에는 2개의 페이지가 있는 예제 입니다. 각각의 페이지에는 id가 있고 이 페이지들은 div를 이용해서 나눠져 있습니다. 여기서 사용되는 ID는 오직 internal page linking 지원에만 필요하다는 것을 염두에 두세요. 각각의 페이지들이 각각의 HTML 문서에 나눠져서 있다면 이 ID는 없어도 되는 option 입니다.


<body>

<!-- Start of first page -->
<div data-role="page" id="foo">

 <div data-role="header">
  <h1>Foo</h1>
 </div><!-- /header -->

 <div data-role="content"> 
  <p>I'm first in the source order so I'm shown as the page.</p>  
  <p>View internal page called <a href="#bar">bar</a></p> 
 </div><!-- /content -->

 <div data-role="footer">
  <h4>Page Footer</h4>
 </div><!-- /footer -->
</div><!-- /page -->


<!-- Start of second page -->
<div data-role="page" id="bar">

 <div data-role="header">
  <h1>Bar</h1>
 </div><!-- /header -->

 <div data-role="content"> 
  <p>I'm the second in the source order so I'm hidden when the page loads. I'm just shown if a link

that references my ID is beeing clicked.</p>  
  <p><a href="#foo">Back to foo</a></p> 
 </div><!-- /content -->

 <div data-role="footer">
  <h4>Page Footer</h4>
 </div><!-- /footer -->
</div><!-- /page -->
</body>







위 화면은 jQuery Mobile 에서 제공하는 Multi page template 화면입니다.



PLEASE NOTE : 모든 Ajax 'pages'의 네비게이션 히스토리를 track 하기 위해 hash를 사용합니다. anchor로 가기 위한 deep link (index.html#foo)는 JQuery Mogile 의 page 기능에서는 현재 가능하지 않습니다. 왜냐하면 프레임워크는 그 ID로 content를 위한 scrolling의 native behavior 대신에 #foo 의 ID를 찾게 될 겁이기 때문입니다.


Conventiions, not requirements


위에 예제는 jQuery Mobile을 사용해 표준 웹 앱 만들기를 위해 권장되는 접근법에 대한 아웃라인 구조입니다. 이 프레임워크는 document structure가 아주

flexible 합니다. page, header, content, footer data- role emements 들은 optional 하고 기본 포맷과 구조를 제공하는데 아주 도움을 많이 줍

니다. auto-initialization 을 위해 사용되는 page wrapper는 single page documents에서는 option 입니다. 그렇기 때문에 특별히 필요한 markup

이 없습니다. custom layout을 사용하는 웹 페이지에서는 이런 모둔 구조적인 elements들은 생략될 수 있습니다. 그리고 Ajax 네비게이션과 모든 위젯들은 그냥 그들

나름대로의 표준구조로 이용 될 수 있습니다. multi page setup을 위해서는 markup안에 page wrapper가 있어야 된다는 것도 잊지 마세요.


여기까지가 Components 내의 Anatomy of a page, Single page template, Multi-page template 내용을 정리한 겁니다.
다음은 Page titles 섹션부터 정리하겠습니다.


 

반응형


반응형

오늘은 JQuery Mobile DOC 의 Overview 부분을 마저 다루겠습니다.


3. Features
4. Accessibility
5. Supported platforms


이렇게 세가주 주제를 다룰건데요. 그냥 간단한 설명들이라서 한번에 다 정리하려구요.


Features

Key features:

  • 익숙한 JQuery core를 사용해서 만들어 졌고 JQuery 신택스가 적용돼 쉽게 배울 수 있고 JQuery UI code와 pattern들을 쉽게 사용할 수 있음
  • 모든 주요 모바일, 태블릿, e-reader, 데스크탑 플랫폼과 잘 호환 됨. iOS, Android, Blackberry, Palm WebOS, Nokia/Symbian, Windows Phone 7, MeeGo, Opera Mobile/Mini, Firefox Mobile, Kindle, Nook, 그리고 최근 기술을 지원하는 브라우저들 
  • 소용량이며 이미지에 따라 속도가 크게 차이나지 않도록 구성 됨
  • custom build를 사용할 수 있도록 구성된 Modular architecture
  • 빠르게 개발할 수 있고 최소한의 코딩으로 작업할 수 있도록 HTML5 Markup-driven configuration 을 사용함
  • Progressive enhancement approach brings core content and functionality to all mobile, tablet and desktop platforms and a rich, installed application-like experience on newer mobile platforms.
  • Responsive design techniques and tools allow the same underlying codebase to automatically scale from smartphone to desktop-sized screens
  • Powerful Ajax-powered navigation system to enable animated page transitions while maintaining back button, bookmarking and and clean URLs though pushState.
  • Accessibility features such as WAI-ARIA are also included to ensure that the pages work for screen readers (e.g. VoiceOver in iOS) and other assistive technologies.
  • Touch and mouse event support streamline the process of supporting touch, mouse, and cursor focus-based user input methods with a simple API.
  • Unified UI widgets for common controls enhance native controls with touch-optimized, themable controls that are platform-agnostic and easy to use.
  • Powerful theming framework 과 ThemeRoller application 은 아주 고급스러운 효과를 쉽게 구현할 수 있도록 도와 줍니다.



Accessibility


JQuery Mobile은 표준을 따릅니다. semantic HTML 을 따르며 그로 인해 가능한 많은 device를 지원할 수가 있습니다. A-Grade 브라우저들은 focus management, keyboard navigation 나 W3C의 WAI-ARIA specification을 따르는 HTML 속성을 지원하는 JQuery Mobile의 많은 컴포넌트이 사용 될 수 있습니다.

이러한 기능을 이용해 애플 아이폰의 VoiceOver 같이 앞을 볼 수 없는 유저들을 위한 screen reader나 웹에 접근하는 다른 지원기술들을 제공해 장애를 가지신 분들도 사용할 수 있도록 기능을 제공합니다.



Supported Platform


jQuery Mobile Supported Platforms


jQuery Mobile은 대부분의 데스크탑, 스마트폰, 태블릿, e-reader 플랫폼 에 대해 폭넓게 지원합니다. 또한 피처폰과 구 버전 브라우저도 지원합니다. 우리는 모든 대중적인 플랫폼을 폭 넓게 지원할 수 있는 것에 대해 자부심을 가지고 있습니다.

우리는 3개의 레벨로 나눠서 각 레벨별 플랫폼을 지원하는 시스템을 가지고 있습니다. : A (full), B (full minus Ajax), C (basic HTML). 비쥬얼한 부분과 부드러운 화면 전환은 그 디바이스나 플랫폼이 얼마나 CSS 를 지원하고 처리하느냐에 많이 영향을 받습니다. 그래서 A 등급이라고 해서 아주 정확하게 표현되거나 움직인다고는 할 수 없지만 대부분 정상적으로 움직입니다. 그리고 이러한 제한은 웹 환경에서는 필수불가결한 요소 입니다.


A-grade - Full enhanced experience with Ajax-based animated page transitions.

  • Apple iOS 3.2-5.0 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.0)
  • Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
  • Android 3.1 (Honeycomb)  - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
  • Android 4.0 (ICS)  - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
  • Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800
  • Blackberry 6.0 - Tested on the Torch 9800 and Style 9670
  • Blackberry 7 - Tested on BlackBerry® Torch 9810
  • Blackberry Playbook (1.0-2.0) - Tested on PlayBook
  • Palm WebOS (1.4-2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)
  • Palm WebOS 3.0 - Tested on HP TouchPad
  • Firebox Mobile (10 Beta) - Tested on Android 2.3 device
  • Chrome for Android (Beta) - Tested on Android 4.0 device
  • Skyfire 4.1 - Tested on Android 2.3 device
  • Opera Mobile 11.5: Tested on Android 2.3
  • Meego 1.2 - Tested on Nokia 950 and N9
  • Samsung bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
  • UC Browser - Tested on Android 2.3 device
  • Kindle 3 and Fire - Tested on the built-in WebKit browser for each
  • Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
  • Chrome Desktop 11-17 - Tested on OS X 10.7 and Windows 7
  • Safari Desktop 4-5 - Tested on OS X 10.7 and Windows 7
  • Firefox Desktop 4-9 - Tested on OS X 10.7 and Windows 7
  • Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
  • Opera Desktop 10-11 - Tested on OS X 10.7 and Windows 7

B-grade - Enhanced experience except without Ajax navigation features.

  • Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
  • Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
  • Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)

C-grade - Basic, non-enhanced HTML experience that is still functional

  • Blackberry 4.x - Tested on the Curve 8330
  • Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
  • All older smartphone platforms and featurephones - Any device that doesn't support media queries will receive the basic, C grade experience

=> 요약설명한 부분들은 제가 번역하면 오히려 좀 더 이상해 지는 것 같아서 영어로 그대로 옮겼습니다.


 이로써 JQuery Mobile DOC 의 Overview 부분을 모두 정리했습니다.

다음은 Components 부분을 정리하겠습니다.


반응형


반응형

아래 Quick start guide에서는 몇가지 예제가 나옵니다.

이 Quick start guide를 하기전에 이 섹션에서 나온 이 예제들을 한 파일로 모아 놓은 샘플을 먼저 정리합니다.

이 코드와 그 결과물을 한번 보시고 튜토리얼을 보시고 다시 이 예제를 이렇게 저렇게 수정해 보시면 만이 도움이 될 겁니다.


<!DOCTYPE html>
<html>
 <head>
 <title>My Page</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
 <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
 <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>
<body>

<div data-role="page">

 <div data-role="header">
  <h1>My Title</h1>
 </div><!-- /header -->

 <div data-role="content">
  <p>Hello world</p>
<ul data-role="listview" data-inset="true" data-filter="true">
 <li><a href="#">Acura</a></li>
 <li><a href="#">Audi</a></li>
 <li><a href="#">BMW</a></li>
 <li><a href="#">Cadillac</a></li>
 <li><a href="#">Ferrari</a></li>
</ul>

<form>
   <label for="slider-0">Input slider:</label>
   <input type="range" name="slider" id="slider-0" value="25" min="0" max="100"  />
</form>
<p>
<a href="#" data-role="button" data-icon="star">Star button</a> <p>
<a href="#" data-role="button" data-icon="star" data-theme="a">Button a</a> <p>
<a href="#" data-role="button" data-icon="star" data-theme="b">Button b</a> <p>
<a href="#" data-role="button" data-icon="star" data-theme="c">Button c</a> <p>
<a href="#" data-role="button" data-icon="star" data-theme="d">Button d</a> <p>
<a href="#" data-role="button" data-icon="star" data-theme="e">Button e</a> <p>
 
 </div><!-- /content -->
<div data-role="footer">
<h1>Footer</h>
</div>
</div><!-- /page -->

</body>
<html>






Quick start guide

Getting Started with jQuery Mobile

JQuery Mobile은 Touch friendly UI widget들을 제공합니다. 그리고 AJAX navigation system을 제공해 animated 된 화면 전환효과를 줄 수 있도록 합니다.

Create a basic page template

익숙한 텍스트 에디터를 여시고 페이지 탬플릿을 복사해 넣으세요. 그것을 저장하신 후 웹 브라우저로 열어보세요. 이제 여러분은 모바일 개발자가 됐습니다.

이 탬플릿 안에는 무엇이 있는지 볼까요? head 안에 meta viewport 태그가 화면 width를 디바이스의 width 만큼 설정했습니다. 그 다음엔 css 파일과 java script 파일을 링크를 걸어 JQuery Mobile을 사용할 수 있도록 했습니다. JQuery Mobile 1.1. 은 JQuery core의 1.6.4 와 1.7.1 버전 과 같이 사용될 수 있습니다.

body에서는 div를 사용했고 data-role이 page로 설정됐습니다. 이것은 page를 감싸기 위해  사용된 겁니다. 그리고 header bar (data-role="header") 와  content region (data-role="content") 는 이 페이지 안에 추가 됐습니다. 이 data- 어트리뷰트는 JQuery Mobile에서 미리 만들어진 widget을 사용하기 위해 사용되는 기본 마크업 입니다.

<!DOCTYPE html>
<html>
    <head>
    <title>My Page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" />
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
</head>
<body>

<div data-role="page">

    <div data-role="header">
        <h1>My Title</h1>
    </div><!-- /header -->

    <div data-role="content">   
        <p>Hello world</p>       
    </div><!-- /content -->

</div><!-- /page -->

</body>
</html>


Add your content

Content container안에 여러분은 standard HTML 엘리먼트를 넣을 수 있습니다. (headings, lists, paragraphs 등등). 그리고 JQuery Mobile stylesheet 다음에 추가로 스타일쉬트를 넣어서 custom layout을 생성할 수 있습니다.

Make a listview

JQuery Mobile에는 다양한 리스트뷰가 있습니다. data-role="listview"를 추가하기만 하면 사용하실 수 있습니다. 아래 listview 라는 role을 갖는 간단한 linked list가 있습니다. 여기에 data-inset="true"를 추가함으로서 inset 모듈처럼 보이도록 만들겁니다. 그리고 data-filter="true" 어트리뷰트를 넣어서 다이나믹 검색 필터를 추가했습니다.

<ul data-role="listview" data-inset="true" data-filter="true">
    <li><a href="#">Acura</a></li>
    <li><a href="#">Audi</a></li>
    <li><a href="#">BMW</a></li>
    <li><a href="#">Cadillac</a></li>
    <li><a href="#">Ferrari</a></li>
</ul>


Add a slider

JQuery Mobile Framework은 form elements 모두를 포함하고 있습니다. 이 엘리먼트들은 touch-friendly styled 위젯들로 자동적으로 구현해 줍니다. 아래에 HTML5에 새로 등장한 slider 를 사용하는 방법이 있습니다.

<form>
   <label for="slider-0">Input slider:</label>
   <input type="range" name="slider" id="slider-0" value="25" min="0" max="100"  />
</form>


Make a button

버튼을 만드는 것은 몇가지 방법이 있습니다. 그 중에서 링크가 걸려있는 버튼을 한번 봅시다. link로 시작해서 data-role="button" 속성을 추가했습니다. 여기에 data-icon 속성을 사용해서 아이콘도 넣을 수 있습니다. 옵션으로 data-iconpos 속성을 이용해서 그 위치도 설정할 수 있습니다.

<a href="#" data-role="button" data-icon="star">Star button</a>

Play with theme swatches

JQuery Mobile에는 theme framework를 통해 26개 세트의 toolbar,content와 button color 를 지원합니다. 이것을 "swatch"라고 합니다. 간단히 data-theme="e" 속성을 추가하세요. 그리고 이 페이지의 아무 위젯이나 넣으세요. (page, header, list, input for the slider, 노란 button) a-e 까지 디폴트로 제공하는 theme을 넣어 보세요.

page에 이 theme swatch를 넣어보세요. 그리고 그 안에 있는 위젯들이 자동적으로 그것을 상속받는 것을 확인해 보세요. (header는 상속하지않고 디폴트인 a를 사용합니다.)

<a href="#" data-role="button" data-icon="star" data-theme="a">Button</a>

custom theme을 만들고 싶다면 drag and drop을 해서 만드는   ThemeRoller 를 사용하세요. 그리고 그 custom theme을 다운 받으시면 됩니다.

Go forth and build stuff

지금까지 보신건 그냥 수박 겉핥기 입니다. 더 많은 훌륭한 기능들이 JQuery Mobile 안에 있습니다. 이러한 기능들을 아주 간단히 이용할 수 있죠. linking pages, animated 페이지 전환, dialog 구현하기 등을 잘 보세요. 기본적으로 JQuery Mobile에서 제공하는 기능을 사용하기 위해 data- 속성을 잘 이용하세요.

좀 더 복잡한 부분으로는 global configuration, events, methods 등이 있습니다. 이것들을 하신 다음에 scripting pages, generating dynamic pages, building PhoneGap apps 등을 보세요.

반응형


반응형

새로 참여하는 프로젝트에서 JQuery Mobile을 사용하게 되서 지금부터는 아무래도 Sencha Touch 보다는 JQuery Mobile에 좀 더 집중해서 정리를 할 것 같습니다.


일단 저는 해당 회사에서 제공하는 공식 튜토리얼을 번역해서 한번 훑어 봐야지 제대로 감이 잡히는 느낌이 들더라구요.


JQueary Mobile DOC는 http://jquerymobile.com/demos/1.1.0/ 에 있습니다.


목차는 아래와 같습니다.


A. Overview

1. Intro to JQuery Mobile
2. Quick start guide
3. Features
4. Accessibility
5. Supported platforms

B. Components

1. Pages & dialogs
2. Toolbars
3. Buttons
4. Content formatting
5. Form elements
6. List views

C. API

1. Configuring defaults
2. Events
3. Methods & Utilities
4. Data attribute reference
5. Theme frame work


그렇게 양이 많은 것 같지 않네요.

일단 튜토리얼 번역을 시작해 볼까요?





Intro to JQuery Mobile

jQuery Mobile Overview

JQuery의 모바일 전략은 아주 간단하게 요약될 수 있습니다. 많이 사용되는 모든 모바일 디바이스 플랫폼에서 JQuery 와 JQuery UI 를 사용해서 차이점 없이 표시되고 동작되는 통일된 유저 인터페이스 시스템을 만드는것이 JQuery 의 전략입니다. 보기 좋은 화면(Feature rich)에 포커스를 두면서도 가벼운 코드베이스로 유연성있게 enhancement 될 수 있도록 합니다. (theming system, ThemeRoller tool)

이 프레임워크는 Ajax 네비게이션 시스템이 포함돼 있습니다. 이것은 animated 된 화면전환 효과를 가능하게 합니다. 그리고 pages, dialogs, toolbars, listviews, buttons with icons, form elements, accordions, collapsibles 등등 같은 UI core set 도 포함돼 있습니다.

우리는 JQuery Mobile로 모든 브라우저와 모든 디바이스에서 작동하는 앱이나 웹을 만드려고 합니다. 그리고 간단하고 마크업 기반의 시스템으로 구성돼 JQuery Mobile을 배우기 쉽도록 하는데 촛점을 맞췄습니다. 좀 더 실력있는 개발자라면 global configuration options, events 같은 풍부한 API를 사용해서  다이나믹한 페이지를 표현하기 위한 메소드를 구현하고 (스크립트를 추가해서)  폰갭같은 툴로 Native App을 빌드할 수도 있습니다.

JQuery Mobile의 모든 페이지는  웹이 가능한 대부분의 디바이스에서 호환성을 주기 위해 clean, semantic HTML을 기반으로 만들어져 보다 많은 상황에서 사용될 수 있도록 했습니다. CSS와 Java Script를 사용할 수 있는 디바이스에서 JQuery Mobile은 JQuery와 CSS의 장점들을 사용해서 인터액티브하고 보기좋은 화면을 보여주는 보다 풍부한 테크닉을 지원합니다.


반응형


반응형
Introducing Corona Twitter Contests

트위터 콘테스트를 엽니다. 경품은 코로나 SDK 1달 무료 이용권입니다.

매주 코로나 트위터 커뮤니티에 질문을 올릴겁니다. 첫번째는 오늘 시작합니다. (Tuesday, May 1)

응모 방법은 아주 간단합니다.

1. 트위터에서 @ansca을 팔로우 해 주세요.
2. Facebook에도 마찬가지구요.
3. @ansca로 여러분의 정답을 트윗 해 주세요. 트윗하실때 #coronaSDK 라고 hashtag를 넣어 주세요.




금주의 질문은......

“Tell us your best/favorite/most awesome app marketing tip in 140 characters!”
"여러분이 가지고 있는 가장 효과적인 앱 광고방법 혹은 가장 좋아하는 앱 광고방법 을 140자 이내로 트윗해 주세요."


다 음주 초에 당선작을 선정하겠습니다. 당첨되시는 분은 코로나 Pro license 1달 무료이용권을 받으실 수 있습니다. (기존 회원은 1달 연장 해 드립니다.) 마감은 5월 6일 일요일 11:59 pm PT (한국 시간으로 5월 7일 월요일 오후 3시 59분 인가요???) 입니다.

당선작은 코로나 커뮤니티에 마케팅 전문가로 추앙받으실 겁니다. 즐트윗하시고 good luck 하세요.



반응형

JQuery Mobile 훑어 보기

2012. 4. 30. 10:19 | Posted by 솔웅


반응형

제가 이번에 새로 가게되는 회사는 Kurogo와 JQuery Mobile 을 기반으로 개발한다고 하네요.

JQuery Mobile 보다는 Sencha Touch 쪽으로 공부를 해 왔는데..

일단 JQuery Mobile 쪽으로 Focus를 좀 맞춰야 겠습니다.


JQuery Mobile을 소개하는 파워포인트가 있어서 그 문서를 한번 훑어 보겠습니다.

원본은 여기에 있습니다.


JQuery Mobile Framework 소개


Mark Dalgleish - @markdalgleish


* JQuery Mobile 이란?

  • JQuery를 사용하는 Mobile framework (obviously).
  • 강력한 cross-browser, cross-platform.
  • Native 와 유사한 웹 앱 생성
  • 마크업 기반 코딩, 최소화 한 코딩 
  • Focused on progressive enhancement, graceful degradation.

* Target Platform

  • iOS, Android, Windows Mobile
  • Blackberry, Symbian, webOS
  • Firefox Mobile (Fennec), Opera Mobile / Mini
  • Meego, bada, Maemo...
  • Phonegap!

* Basic Page Elements

  • data-role 어트리뷰트와 DIV를 사용해 정의하는 Custom elements 
  • 최소한 하나의 data-role="page" element 필요
  • 페이지 안에 최소 한개의 data-role = "content" 엘리먼트 필요 
  • 클래스들은 자동적으로 추가 됨 
  • Form elements 와 lists 들은 자동적으로 업데이트가 적용 됨

* Basic Page Markup

<!doctype html>
<html>
 
<head>
 
<title>Page Title</title>
 
<link rel="stylesheet" href="jquery.mobile.css" />
 
<script src="jquery.js"></script>
 
<script src="jquery.mobile.js"></script>
</head>
<body>
<div data-role="page">
 
<div data-role="header">
   
<h1>Page Title</h1>
 
</div>
 
<div data-role="content">  
   
<p>Page content goes here.</p>    
 
</div>
 
<div data-role="footer">
   
<h4>Page Footer</h4>
 
</div>
</div>
</body>
</html>



* Virtual Pages

<div data-role="page" id="page1">
 
<div data-role="header">
   
<h1>Page 1</h1>
 
</div>
 
<div data-role="content">
   
<a href="#page2" data-role="button">Go to Page 2</a>
 
</div>
</div>

<div data-role="page" id="page2">
 
<div data-role="header">
   
<h1>Page 2</h1>
 
</div>
 
<div data-role="content">
   
<a href="#page1" data-role="button">Go to Page 1</a>  
 
</div>
</div>


* Separate Pages with AJAX Loading
<div data-role="page">
 
<div data-role="header">
   
<h1>Page 1</h1>
 
</div>
 
<div data-role="content">
   
<a href="page2.html" data-role="button">Go to Page 2</a>
 
</div>
</div>


* Fixed Footer Navigation

<div data-role="footer" data-id="myfooter" data-position="fixed">
 
<div data-role="navbar">
   
<ul>
     
<li><a href="footer.html" class="ui-btn-active">One</a></li>
     
<li><a href="footer2.html">Two</a></li>
     
<li><a href="footer3.html">Three</a></li>
   
</ul>
 
</div>
</div>

// Second page
<div data-role="footer" data-id="myfooter" data-position="fixed">
 
<div data-role="navbar">
   
<ul>
     
<li><a href="footer.html">One</a></li>
     
<li><a href="footer2.html" class="ui-btn-active">Two</a></li>
     
<li><a href="footer3.html">Three</a></li>
   
</ul>
 
</div>
</div>

// Third page
<div data-role="footer" data-id="myfooter" data-position="fixed">
 
<div data-role="navbar">
   
<ul>
     
<li><a href="footer.html">One</a></li>
     
<li><a href="footer2.html">Two</a></li>
     
<li><a href="footer3.html" class="ui-btn-active">Three</a></li>
   
</ul>
 
</div>
</div>


* AJAX Loading In Depth

  • 모든 페이지가 JQuery Mobile 표준에 맞아야 한다.
  • AJAX를 지원하려면 transition과 함께 DOM에 맞게 페이지들이 구성되어야 한다. 그렇지 않으면 일반 페이지가 로드된다.
  • 페이지 로드가 실패하면 유저는 friendly 한 에러메세지를 받게 된다.
  • 같은 도메인의 모바일페이지가 아닌 페이지로 링크할 때는 rel="external"을 이용한다.
  • 다른 도메인으로 링크되는것은 자동적으로 감지되고 일반적인 로드와 동일하게 작업을 수행한다. 


* Form Elements

  • 일반적인 Form element들은 모바일 usability에 따라 자동적으로 그에 맞게끔 적용된다. 
  • 모든 컨트롤들은 Native와 마찬가지로  gracefully degrade 된다.
  • 디폴트 세팅은 필요하면개발자가 바꿀 수 있다.



* Form Element Markup


<div data-role="fieldcontain"> 
 
<label for="textbox">Textbox:</label>
 
<input type="text" name="textbox" id="textbox" value=""  />
</div>

<div data-role="fieldcontain">
 
<label for="textarea">Textarea:</label>
 
<textarea name="textarea" id="textarea" value=""></textarea>
</div>

<div data-role="fieldcontain">
 
<label for="search">Search:</label>
 
<input type="search" name="search" id="search" value=""  />
</div>

<div data-role="fieldcontain">
 
<label for="slider">Slider:</label>
 
<select name="slider" id="slider" data-role="slider">
   
<option value="0">Off</option>
   
<option value="1">On</option>
 
</select>
</div>

<div data-role="fieldcontain">
 
<label for="range">Range:</label>
 
<input type="range" name="range" value="0" min="0" max="10" />
</div>

<div data-role="fieldcontain">
 
<fieldset data-role="controlgroup">
   
<legend>Checklist:</legend>
   
<input type="checkbox" name="checkbox1" id="checkbox1" />
   
<label for="checkbox1">HTML</label>

   
<input type="checkbox" name="checkbox2" id="checkbox2" />
   
<label for="checkbox2">CSS</label>

   
<input type="checkbox" name="checkbox3" id="checkbox3" />
   
<label for="checkbox3">JavaScript</label>
 
</fieldset>
</div>

<div data-role="fieldcontain">
 
<fieldset data-role="controlgroup" data-type="horizontal">
   
<legend>Horizontal Checklist:</legend>
   
<input type="checkbox" name="checkbox4" id="checkbox4" />
   
<label for="checkbox4">Tea</label>

   
<input type="checkbox" name="checkbox5" id="checkbox5" />
   
<label for="checkbox5">Coffee</label>
 
</fieldset>
</div>

<div data-role="fieldcontain">
 
<fieldset data-role="controlgroup">
   
<legend>Radio Buttons:</legend>
     
<input type="radio" name="radio1" id="radio1a" value="a" />
     
<label for="radio1a">HTML5</label>

     
<input type="radio" name="radio1" id="radio1b" value="b" />
     
<label for="radio1b">Flash</label>

     
<input type="radio" name="radio1" id="radio1c" value="c" />
     
<label for="radio1c">Silverlight</label>
 
</fieldset>
</div>

<div data-role="fieldcontain">
 
<fieldset data-role="controlgroup" data-type="horizontal">
   
<legend>Horizontal Radio Buttons:</legend>
     
<input type="radio" name="radio2" id="radio2a" value="a" />
     
<label for="radio2a">Tea</label>

     
<input type="radio" name="radio2" id="radio2b" value="b" />
     
<label for="radio2b">Coffee</label>
 
</fieldset>
</div>

<div data-role="fieldcontain">
 
<label for="select1" class="select">Standard Select:</label>
 
<select name="select1" id="select1">
   
<option value="1">HTML5</option>
   
<option value="2">Flash</option>
   
<option value="3">Silverlight</option>
 
</select>
</div>

<div data-role="fieldcontain">
 
<label for="select2" class="select">Custom Select:</label>
 
<select name="select2" id="select2" data-native-menu="false">
   
<option value="1">HTML5</option>
   
<option value="2">Flash</option>
   
<option value="3">Silverlight</option>
 
</select>
</div>

<button name="button" name="button">Button</button>
<button type="submit" name="submit">Submit</button>


* List View Markup

<h4>Basic List View</h4>

<ul data-role="listview" data-inset="true">
 
<li>HTML</li>
 
<li>JavaScript</li>
 
<li>CSS</li>
</ul>

<h4>Linked List View</h4>

<ul data-role="listview" data-inset="true">
 
<li><a href="target.html">HTML</a></li>
 
<li><a href="target.html">JavaScript</a></li>
 
<li><a href="target.html">CSS</a></li>
</ul>

<h4>Ordered List View</h4>

<ol data-role="listview" data-inset="true">
 
<li><a href="target.html">HTML</a></li>
 
<li><a href="target.html">JavaScript</a></li>
 
<li><a href="target.html">CSS</a></li>
</ol>

<h4>Nested List View</h4>

<ul data-role="listview" data-inset="true">
 
<li>
    iOS
   
<ul data-role="listview" data-inset="true">
     
<li><a href="target.html">v2.2.1</a></li>
     
<li><a href="target.html">v3.1.3, v3.2</a></li>
     
<li><a href="target.html">v4.0</a></li>
   
</ul>
 
</li>
 
<li>
    Android
   
<ul data-role="listview" data-inset="true">
     
<li><a href="target.html">v1.5, v1.6</a></li>
     
<li><a href="target.html">v2.1</a></li>
     
<li><a href="target.html">v2.2</a></li>
   
</ul>
 
</li>
 
<li>
    Windows Mobile
   
<ul data-role="listview" data-inset="true">
     
<li><a href="target.html">v6.1</a></li>
     
<li><a href="target.html">v6.5.1</a></li>
     
<li><a href="target.html">v7.0</a></li>
   
</ul>
 
</li>
</ul>

<h4>Searchable List View</h4>

<ul data-role="listview" data-inset="true" data-filter="true">
 
<li><a href="target.html">HTML</a></li>
 
<li><a href="target.html">JavaScript</a></li>
 
<li><a href="target.html">CSS</a></li>
</ul>

<h4>Split Button List View</h4>

<ul data-role="listview" data-inset="true">
 
<li>
   
<a href="target.html">HTML</a>
   
<a href="options.html" data-icon="gear">Options</a>
 
</li>
 
<li>
   
<a href="target.html">JavaScript</a>
   
<a href="options.html" data-icon="gear">Options</a>
 
</li>
 
<li>
   
<a href="target.html">CSS</a>
   
<a href="options.html" data-icon="gear">Options</a>
 
</li>
</ul>

<h4>Thumbnail List View</h4>

<ul data-role="listview">
 
<li>
   
<a href="target.html">
     
<img src="thumbnail1.jpg" />
     
<h3>Miles Davis</h3>
     
<p>Kind of Blue<p>
   
</a>
 
</li>
 
<li>
   
<a href="target.html">
     
<img src="thumbnail2.jpg" />
     
<h3>Cannonball Adderley</h3>
     
<p>Somethin' Else</p>
   
</a>
 
</li>
 
<li>
   
<a href="target.html">
     
<img src="thumbnail3.jpg" />
     
<h3>Charles Mingus</h3>
     
<p>The Black Saint and the Sinner Lady</p>
   
</a>
 
</li>
</ul>


* So where's the JavaScript?

Oh yeah, I almost forgot.


* New Events

  • User events: tap, taphold, swipe, swipeleft, swiperight, orientationchange, scrollstart, scrollstop.
  • Page events: pagebeforeshow, pagebeforehide, pageshow, pagehide.
  • $(document).ready()?: pagebeforecreate, pagecreate.

* New Functions!

  • $.mobile.changePage(options)
  • $.fn.listview(), $.fn.selectmenu() etc...
  • $.fn.listview('refresh'), $.fn.selectmenu('refresh') etc...
  • $.fn.jqmData(), $.fn.jqmRemoveData(), and $.fn.jqmHasData()
  • $.mobile.pageLoading(bool)
    Show or, if bool is false, hide loading indicator.
  • $.mobile.silentScroll(y)
  • $.mobile.media() - Run cross-browser media queries!

* Responsive Layout HTML Classes

  • .portrait and .landscape classes.
  • .min-width-x and .max-width-x classes
    (x == 320, 480, 768 and 1024)
  • Create custom width breakpoints with $.mobile.addResolutionBreakpoints()

* Now What?



* 만약 관심이 있으시면...

======= o ====== o ======= o ======= o ======


나름대로 성의있게 잘 정리된 문서 같습니다.

이 문서를 보고 그 다음에 JQuery Mobile 웹사이트에 가서 DOC를 훑어보고 출근해야겠습니다.

앞으로 JQuery Mobile 관련 글들을 많이 올리게 될 것 같네요.


반응형

Grace Church in Nutley (Episcopal)

2012. 4. 30. 07:55 | Posted by 솔웅


반응형

회사를 옮기게 되서 Rhod Island 로 이사가게 됐습니다.

이삿짐 싸고 이사 준비하고 또 새 직장에서 할 일들 준비하고 하느라 정신이 없네요.


오늘은 그동안 다니던 교회를 마지막으로 다녀왔어요.

저는 성공회 신자라서 성공회 교회를 다녔는데요. 교회는 Grace Church in Nutley 입니다.


오늘은 이 교회에서 아주 특이한 행사를 했어요.


가죽 잠바입고 근사한 오토바이를 타는 오토바이 족들을 위한 교회 행사예요.






이 오토바이 가지고 나오신 분들은 다들 40~50 대들 되는거 같애요.

교회에서 이런 행사를 지원하는게 신기하더라구요.


오토바이 가져 오신 분들은 15불씩 Donation 하고 이 행사에 참가하나봐요.

그리고 일반인들이 10불씩 내고 저 오토바이 뒤에 타고 '오빠 달려~~' 할 수 있구요.


교회 잔디밭에는 바베큐 구이도 하고 있었어요.


저는 이사준비를 해야 되서 이 행사에 참석하지는 못하고 이렇게 사진만 몇장 찍고 왔습니다.


저는 5월 10일에 이사가는데 회사에서는 5월 1일부터 출근하라고 해서 그동안은 모텔에서 지내야 합니다.


여러모로 경황이 없어서 한동안 블로그 활동을 잘 할 수 있을지 모르겠네요.

10일에 이사가서 그 다음날 정도에 인터넷이 깔릴테니까 그때나 글을 올릴 수 있을 것 같습니다.


그럼 그때 다시 뵙겠습니다.

반응형


반응형

오늘은 Dallas 지역에서 Corona SDK 명예대사로 활동하고 있는 Charles McKeever 의 글을 소개 합니다.


==== o ==== o ==== o ====


I’m Now A Corona SDK Ambassador

I have great news to share with you. I’m pleased to announce that I am now a Corona SDK Ambassador. What that means to you is that you’ll be hearing a lot more about mobile development on Open Source Marketer and I’ll be letting you know about upcoming Corona SDK events in the Dallas area.

여러분에게 좋은 소식을 알려드립니다. 제가 코로나 SDK 명예대사가 됐다는 것을 알려드리게 되서 기쁩니다. 여러분 이 의미는 뭐냐 하면 여러분들은 오픈 소스 마케터의 모바일 개발에 대한 훨씬 더 많은 소식을 들을 수 있게 될것이며 달라스 지역에 코로나 SDK 이벤트(모임)을 열것이라는 것입니다.

What is the Corona SDK?

Well, essentially Mobile development is clearly the future of computing and it’s where the eyeballs are going. The Corona SDK makes it possible to rapidly prototype and develop mobile apps on iOS, Android, Nook, and Kindle devices without needing to learn a complicated programming language. That means you can spend more time being creative.

기본적으로 모바일 개발은 확실히 컴퓨팅의 미래입니다. 그리고 여러분들도 많은 관심이 있으실 겁니다. 코로나 SDK는 이것을 훨씬 앞당길 수 있는 툴입니다. 코로나는 iOS, 안드로이드, Nook, Kindle Fire 등의 그 복잡한 프로그래밍 언어를 배울 필요없이 간단하게 개발할 수 있도록 합니다. 이 말은 곧 모바일 앱을 개발하면서 여러분은 좀 더 창조적인 생각을 하는데 시간을 더 투자할 수 있다는 얘기입니다.





Last year I joined the Corona community after doing a lot of research on how to develop mobile applications for iOS, Kindle, and Android devices. Ansca Mobile’s Corona SDK was the most attractive solution I found because it uses the Lua programming language which shares a lot the the same syntax and programming style as PHP and JavaScript does, while still maintaining a high level of user experience for the end user. As a WordPress developer, the Corona SDK has allowed me to enter the mobile space without needing to completely retrain or retool. I’m able to reference Ansca Mobile’s documentation during development and use the same development tool that I’m already comfortable using.

저는 작년에 iOS, Kindle Fire, 안드로이드 디바이스를 위한 모바일 앱 개발을 어떻게 할 것인가를 많이 연구한 끝에 코로나 커뮤니티에 가입하게 됐었습니다. Ansca Mobile의 코로나 SDK는 제가 찾은 방법중에 가장 매력적인 것이었습니다. 왜냐하면 이 툴은 Lua 프로그래밍 언어를 사용해 PHP나 JavaScript와 거의 유사한 신택스를 가지고 있고 아주 높은 수준의 user experience를 제공하는 기능이 풍부했습니다. WordPress developer 처럼 코로나 SDK는 저를 뭔가 새로운것을 많이 배우지 않아도 모바일 세계에 입문할 수 있도록 도와 주었습니다. 개발하는 동안 Ansca Mobile의 튜토리얼을 참조할 수 있었고 이미 사용했던 다른 익숙한 툴처럼 이 툴을 사용할 수 있었습니다.

So what does it mean to be a Corona SDK Ambassador?

To me being a Corona SDK Ambassador means that I’ll be doing my part to help promote the Corona SDK and build a strong community of both mobile developers and non-techies. I believe anyone can be a creative person with great ideas and the Corona Community will help connect story tellers, writers, artists, programmers, business types, and others together so we can all use our individual skills to create great things together.

저에게 Corona SDK 명예대사가 된다는 의미는 제가 Corona SDK 의 프로모션을 도와주는 한 사람이 될 거라는 것이고요. 모바일 개발자와 프로그래밍을 모르는 일반인들을 위한 강력한 커뮤니티를 만들 거라는 겁니다. 여러분 모두 좋은 아이디어로 창조적인 사람이 될 수 있다고 믿습니다. 그리고 코로나 커뮤니키는 스토리텔러와 작가, 예술가 그리고 프로그래머들, 비지니스맨 등을 서로 연결시켜주는데 도움을 줄 것입니다. 그래서 우리의 기술들을 이용해서 다 함께 창조적인 결과물을 만들 수 있을 겁니다.

So, if you’re in the Dallas area, be sure to join the first ever Dallas Corona SDK Meetup group. The group is brand new and fully supported by the great folks at Ansca Mobile. Right now there are 19 Corona SDK Meetup Groups and growing. If you can’t join the Dallas Corona SDK Meetup Group, consider joining one close to you or contact Ansca Mobile directly to help them start a group in your area.

그러니까 만약 여러분이 달라스 지역에 계시다면 이 지역에 최초로 만들어진 달라스 Corona SDK 모임에 참가하세요. 이 그룹은 이번에 새로 만들어지는 그룹이고 Ansca Mobile 의 전문가들로부터 적극적으로 지원을 받고 있습니다. 지금까지 전 세계적으로 19개의 코로나 SDK 모임이 이뤄졌고 점점 더 늘어나고 있습니다. 만약 여러분이 달라스 코로나 SDK 모임에 참여할 수 없이시다면 여러분 가까이에 있는 모임에 참여하세요. 아니면 Ansca Mobile에 직접 연락하셔서 여러분 지역에서 모임을 시작하겠다고 말하고 논의하셔도 됩니다.

Let’s build something great together.

우리 함께 뭔가 근사한 일을 해 봐요.

Charles McKeever
Corona SDK Ambassador


=====  o ==== o ===== o ====


Charles 는 http://opensourcemarketer.com 에서 활동하는것 같습니다.  (아마 이 싸이트를 운영하는것 같애요.)


코로나 명예대사가 되어서 이제 모임을 결성하려나 봅니다.

지금 각 지역별로 오프라인 모임이 하나하나 진행중이거든요.


저는 미국에 있어서 오프라인 모임을 진행하는 것은 힘들고...

어떻게 해야 하는지 많이 고민이 됩니다.


제가 요즘 회사를 옮기게 되었습니다.

그래서 다음주에 New Jersey에서 Rhode island 로 이사해야 해서 조금 정신이 없습니다.


그리고 새 회사에서도 적응하는 기간동안에는 마음의 여유가 별로 없을 것 같구요.

그 회사에서는 Kurogo와 JQuery Mobile 기술을 주로 사용하나 봅니다. 그쪽으로다 공부 해야 할 것 같고..


하여간 여러모로 Corona SDK 명예대사로서 해보고 싶은 일이 많은데 좀 한계를 느낍니다.

그래도 하나하나 차근 차근 해 나가다 보면 언젠가는 아주 활성화 된 모임을 가질 수 있겠죠.

여러분들의 조언과 참여 부탁드립니다.


지금은 코로나에서 발표되는 새로운 기술이나 뉴스 등을 이 블로그를 통해서 전달하고 있는 수준인데요. 


우리도 달라스처럼 같이 모여서 뭔가 멋진 일을 한번 해 봐요... ^^


반응형


반응형

Scene Overlays and Parameter Passing

Posted by Jonathan Beebe

Storyboard API에서 가장 요구되어지는 두가지 사항들은 화면 전환하면서 custom data를 전달할 수 있는 기능과 한 scene 이 다른 scnen 위에 표시되는 pop up 기능입니다.

많은 분들이 그런 기능을 기다려왔는데 이제 더 이상 기다리지 않으셔도 됐습니다. Daily build 2012.797에 바로 이 두가지 기능이 모두 추가 됐습니다. 이름은 parameter passing과 scene overlays 입니다. (build 2012.785 에는 이미 parameter passing이 있었습니다.

이 기능들과 관련된 튜토리얼은 storyboard.gotoScene()의 parameter passing 과 storyboard.showOverlay()의 scene overlays 에서 보실 수 있습니다. 이렇게 튜토리얼이 있지만 여러분들의 이해를 돕기 위해 이 글에서 간단히 설명 드리겠습니다.

Parameter Passing

parameter passing은 한 scene에서 다음 scene으로 넘어가면서 custom data (하나의 변수 일 수도 있고 테이블-배열- 형식일 수도 있습니다.)를 쉽게 전달할 수 있도록 해 줍니다.

이것을 사용하게 하려면 storyboard.gotoScene() 의 신택스를 바꿔야만 했습니다. (걱정마세요. 이전 신택스도 계속 사용할 수 있습니다. 그러니 지금 진행하시는 프로젝트에는 아마 문제가 없습니다.) 아래 이 parameter passing을 사용하기 위한 새로운 신택스 예제가 있습니다.

local options =
{
    effect = "fade",
    time = 400,
    params =
    {
        var1 = "custom data",
        sample_var = 123,
    }
}
storyboard.gotoScene( "game_scene", options )


가장 크게 다른 점은 storyboard.gotoScene() 함수의 두번째 인수입니다. 이 인수가 optional key들과 optional table로 이루어져 있습니다. 위 예제에서는 모든 가능한 옵션들을 다 보여 줍니다. (effect,time,params). 새로운 부분은 params option 입니다. 이것은 변수가 될 수도 있고 테이블이 될 수도 있습니다.

이렇게 custom data를 pass 하면 그 다음 화면에서는 createScene이나 willEnterScene 그리고 enterScene event 리스너 등에서 event.params 로 이 데이터에 접근할 수 있습니다.

아래에는 game_scene.lua의 enterFrame에서 custom data를 access 하는 예제를 보여드리고 있습니다.

function scene:enterScene( event )
    local params = event.params

    print( params.var1 )    -- "custom data"
    print( params.sample_var )  -- 123
end





Scene Overlays

scene overlay 는 현재의 scene 위에 overlay 해서 다른 scene을 보여 주는 것입니다. 화면전환 효과를 사용해서 이 다른 scene이 나오지만 그 이전 scene이 없어지지 않고 그 자리에 그대로 있게 됩니다. 이 두 화면(scene)에는 두가지 이벤트가 추가 됩니다. 하나는 scene overlay가 display 됐을 때 dispatch 되는 이벤트하고요 그렇지 않을 때 dispatch 되는 이벤트입니다.

storyboard.showOverlay()

View Documentation

이 함수는 overlay를 보여주는 역할을 합니다. overlay 하기 위해 만든 scene은 다른 scnen과 같은 구조를 가졌을 겁니다. 어느 scene이든지 overlay 하고 싶으면 하시면 됩니다. 사실 overlay 가 display 되면 overlayBegin 이벤트가 현재 active 한 non-overlay scene에 dispatch 되게 됩니다. overlay 가 remove 되면 overlayEnded 가 dispatch 되죠.

아래 예제를 보세요. (scene1.lua에 있는 코드라고 생각해 봅시다.)

local options =
{
    effect = "fade",
    time = 400,
    params = { sample_var=456 }
}
storyboard.showOverlay( "overlay_scene", options )


이 scene1.lua의 어느 부분엔가 여러분은 옵션으로 overlayBegan과 overlayEnded 이벤트를 추가할 수 있습니다.

function scene:overlayBegan( event )
    print( "The overlay scene is showing: " .. event.sceneName )
    print( "We get custom params too! " .. event.params.sample_var )
end
scene:addEventListener( "overlayBegan" )

--

function scene:overlayEnded( event )
    print( "The following overlay scene was removed: " .. event.sceneName )
end
scene:addEventListener( "overlayEnded" )


위 리스너들에서 유심히 보셔야 될 것들이 두가지 있습니다. 첫번째는 일반적인 화면 전환에서와 같이 파라미터(custom data)들을  overlays scene에 params option을 사용해서  pass 할 수 있습니다. 그 custom data는 위에서 보신 예대로 리스너 함수에서 event.params 로 접근할 수 있구요.

두번째로 보셔야 될 부분은 event.sceneName 변수 입니다. 이것은 overlay scene의 이름을 나타냅니다. 이 변수는 overlayBegan과 overlayEnded 이벤트에서만 접근 가능합니다.

좀 더 자세한 사용법과 신택스는 storyboard.showOverlay() 문서를 봐 주세요.

storyboard.hideOverlay()

View Documentation

이 함수는 이름만 봐서도 어떤 일을 하는지 알 수 있겠죠? 그런데 한가지 알아두셔야 할 중요한 사항이 있습니다. 이것은 현재 보여지는 overlay를 hide 해줍니다. 하지만 그 이상의 무엇인가가 또 있습니다.

디폴트로 overlay scene은 완전히 remove 될 겁니다. (purge되고 메모리에서 그 모듈이 unload 될 겁니다. 현재 load된 scene이 일반적인 scene이고 overlay로 사용되고 있지 않다면요) 옵션으로 이 함수로 overlay scene을 간단하게 purge 시킬 수도 있습니다. 이것은 조만간 이 화면을 다시 사용하려고 할 때 유용하게 이용될 겁니다.

storyboard.showOverlay() 함수가 있는데요. 이 함수에서 storyboard.gotoScene()에서 사용할 수 있는 화면전환 효과도 사용할 수 있습니다.

좀 더 자세한 사용법과 신택스는 storyboard.hideOverlay() 문서를 참조하세요.

Important Notes

overlay scene과 관련해서 몇가지 알아 두셔야 할 점들이 있습니다.

첫번쨰로 한번에 단 한개의 overlay 화면만이 보여질 수 있습니다. 여러분이 storyboard.gotoScene(), storyboard.removeAll(), storyboard.purgeAll() 을 call 하거나 다른 overlay scene을 보여주려고 시도한다면 현재의 overlay scene은 remove 될 겁니다. 이 overlay scene은 그 이전에 있던 오리지널 scene에 종속돼 있는 것입니다.

또 다른 중요한 사항은 overlay scene들을 어떻게 call 하느냐에 대해 주의하셔야 합니다. 예를 들어 시간을 좀 delay 시킨 후 overlay를 보여준다면 화면전환 효과는 이 time delay가 끝날 때까지 일어나지 않을거라는 겁니다. 그리고 오리지널 scene에서 display.gotoScene()을 하기전에 이 overlay를 remove 해 주셔야 합니다.



반응형


반응형

Working with Time: Delays and Counting 

Posted by Jonathan Beebe

time 을 사용하는 앱이나 게임은 무수히 많습니다. 몇 초 후에 어떤 일이 일어나게 하던지 유저가 얼마 안에 특정 일을 끝내게 해야 한다던지 같은 시간을 컨트롤 해야 할 일들은 많습니다.

Corona SDK에서는 이러한 time을 빠르고 쉽게 콘트롤 함으로서 게임이나 앱의 개발에 도움을 줄 수 있는 가이드를 제공하고 있습니다.

이 튜토리얼에서는 코로나의 아주 유용한 timer.performWithDelay() 함수에 대해 소개하려고 합니다. 그리고 이 함수를 가지고 여러분의 앱에서 간단하게 활용할 수 있는 방법도 알려 드리겠습니다.

Time Delays


timer.performWithDelay() 는 특정 시간 이후에 특정 동작을 행할 수 있도록 해 줍니다. 이 함수 이름만 봐도 이 함수가 뭘 하는지 쉽게 짐작하실 수 있을 겁니다.

아래 신택스가 있습니다.

timer.performWithDelay( delay, listener [, iterations] )


여러분이 이 함수를 call 했을 때 여러분은 얼마동안 delay 하는지에 대해 정해 주시면 됩니다. (단위는 밀리세컨드입니다.) 그리고 그 지정된 시간이 다 됐을 때 불리워질 함수를 넣으시면 됩니다. 옵션으로 이 작업을 몇번이나 반복해서 수행하는지도 iterarions 에 숫자를 넣어서 정해 주시면 됩니다. 디폴트는 1 입니다.

What are iterations?

timer iteration은 이 timer.performWithDelay 를 몇번 수행할지 정해 주시는 부분입니다. 이 숫자를 0으로 지정하시면 이 timer를 remove 하거나 앱을 종료할 때까지 무한으로 반복합니다.


다음에는 timer.performWithDelay() 함수와 함께 anonymous 함수를 어떻게 사용할 수 있는지에 대해 알려드리겠습니다.





Using a function

아래 예제에서는 1초 후에 hello_world() 함수를 call 하는 것을 단 1회 시작하도록 코딩 했습니다.

local function hello_world()
  print( "Hello world!" )
end

timer.performWithDelay( 1000, hello_world, 1 )


hello_world vs. hello_world()

계속 진행하기 이전에 많은 개발자 분들이 혼동하시는 부분에 대해 명확히 밝히고 넘어가겠습니다. 위 예제에서 timer.performWidhDelay() 함수의 두번째 인수로 hello_world() 를 사용하지 않고 hello_world 를 사용한 점입니다.

그 이유는 이것은 존재하는 함수를 단지 참조하라고 알려주는 것이라서 입니다. 그래서 우리는 그 함수의 변수명(variable name)을 사용하면 되는 겁니다. 만약에 여기에 hello_world()를 사용한다면 이 함수를 실제로 call 하게 되는 겁니다. 그러면 hello_world() 함수에서 return 되는 값에 따라 그 다음 동작이 일어날 수도 있고 안 일어 날 수도 있습니다. 기본적으로 함수의 디폴트 return 은 nol 이기 때문에 그렇게 하면 문제가 발생할 수가 있습니다. 그래서 함수명이 아니라 변수명을 사용하시는 겁니다.


Using anonymous functions

timer.performWithDelay() 함수의 두번째 인수가 함수가 들어가는데요. 여기에 anonymous 함수를 사용할 수도 있습니다. 그냥 이 부분에 함수를 구현하실 수 있다는 애기입니다. 아래 예제에서 보시는 대로 두번째 인수에 이 함수를 구현하시면 됩니다.

timer.performWithDelay( 1000, function()
  print( "Hello world!" )
end, 1 )


물론 이것을 1라인으로 만들 수도 있지만 이것이 함수인것을 좀 더 이해하기 쉽도록 하기 위해 저렇게 줄을 나눴습니다.

이 anonymous 함수를 사용하실 때 알아두셔야 할 점은요. 쉼표 (,) 사이에 전체 함수 (function() 에서 end 까지)가 들어가야 한다는 것입니다. 그래야지 timer.performWithDelay()는 이 인수가 valid 하다고 판단합니다.

좀 더 자세한 정보는 1년전에 Eric Wing이 작성한 using closures as function callbacks 튜토리얼을 보시면 아실 수 있을 겁니다.

Passing Arguments to the Listener

timer.performWithDelay()를 사용하면서 많이 나오는 질문이 호출하는 함수에 어떤 인자를 전달할 수 있느냐 입니다.

이것을 구현하는 방법은 아래와 같이 하시면 됩니다.

local function hello_world( arg1, arg2 )
  print( "Hello world!", arg1, arg2 )
end

timer.performWithDelay( 1000, function()
    hello_world( "first", "second" )
end, 1 )


어떻게 하는지 아시겠죠? timer.performWithDelay() 안에서 anonymous 함수를 사용해서 그 함수에서 외부 함수를 인수와 함께 호출했습니다.
좀 헛갈리시나요? 몇번 해 보시면 금방 익숙해 지실 겁니다.

Other functions

timer 함수는 timerId를 return 합니다. 그래서 다른 함수가 이 timerId를 가지고 어떤 동작을 하도록 컨트롤 할 수 있습니다. timer 함수에는 timer.pause, timer.cancel(), timer.resume() 등의 메소드가 있습니다. 이 메소드들은 이름만 봐도 어떤 일을 하는지 알 수 있겠죠? 자세한 내용은 timer API reference page 를 참조하세요.

Counting Time


앞서 얘기했듯이 앱에서 이 time을 컨트롤 해야 할 상황이 아주 많습니다. 예를 들어 게임을 시작하는 시간과 끝나는 시간을 한번 catch 해 봅시다.

이 게임을 시작하는 부분에 아래 코드를 넣습니다.

local markTime = os.time()

os.time()
이 함수는 현재의 시간을 return 합니다. (위와 같이 아무런 인자 없이 call 했을 경우) 이외에도 더 많은 기능이 있는데요. 그 기능은 여기를 참조하세요.



사용자가 game over 상태에 이르렀을 때 아래 코드로 게임 시간이 얼마나 길었는지를 얻어낼 수 있습니다.

local timePassed = os.time() - markTime


처음 시작했을 때의 시간이 markTime 이니까 끝날 때의 현재시간 (os.time()) 에서 markTime을 빼면 게임 시간이 나오겠죠? 여기서 timePassed 는 초단위로 값을 갖고 있습니다. 분단위로 표시하고 싶으면 이 값을 60으로 나누면 되겠죠. 밀리세컨드로 하려면 1000을 곱하면 되겠구요. 밀리세컨드로 곧바로 값을 받을 수도 있습니다. system.getTimer()를 이용하시면 됩니다. 이용하시는 방법은 위와 똑 같구요.

Time’s up!

이제 여러분은 timer.performWithDelay() 함수를 사용하시는데 프로가 되셨습니다. 그리고 여러분의 앱에서 어떻게 time을 관리해야 하는지에 대해서도 이해하셨을 겁니다.

time 과 관련된 다른 함수들들을 더 이해하고 싶으시면 os.clock(), os.date(), os.difftime(), system.getTimer() 함수들을 보시면 더욱 더 유용하게 여러분의 앱에서 time을 컨트롤 하실 수 있을 겁니다.

반응형