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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

Corona: WebViews on Android!

Posted on . Written by


월요일입니다. 업데이트 날이죠.


지난주 저는 Mountain Lion 과 관련된 여러 어려움들을 얘기 했었습니다. Mountain Lion은 Mac OS 10.8에 대한 코드 네임이죠. 여러곳에서 report 를 해준 분들에게 감사드립니다. 저희는 이 부분과 관련해서 여러 문제점들을 해결해 나가고 있습니다. 최근의 daily build (868 버전 이후) 들은 10.8 에서 안정적으로 돌아 갑니다.


이렇게 Mountain Lion과 관련해서 작업을 하고 있는 사이에도 우리는 feature cycle 작업을 계속 해 나가고 있습니다. 이 cycle의 우선 순위에 있던 것 중 하나가 안드로이드의 native display object 관련 된 것 입니다. 예를 들어 textfield 처럼 안드로이드 native display에서는 alpha가 지원되지 않았었습니다. 지금은 그것을 지원하도록 만들었습니다.

안드로이드의 WebViews는 아주 중요한 이슈였습니다. 안드로이드에서는 그동안 웹 팝업을 지원했었죠. 하지만 이 팝업만으론 부족했습니다. 이제 그것을 일반 display object 처럼 사용가능합니다. 최금의 builds 에서 안드로이드에서 native display 로서 Webview를 제대로 사용하실 수 있습니다. 지금까지 iOS에서 사용했던 것 처럼요. 이 의미는 여러분은 이제 OpenGL/HTML5 hybrid 앱을 iOS와 안드로이드 모두에서 사용하실 수 있다는 겁니다.


이 웹뷰 기능과 관련해서는 저희들이 특별히 중점을 두고 관리를 했고 그렇게 해서 안드로이드의 웹뷰와 iOS의 웹뷰의 일관성을 유지하는데 많은 노력을 기울였습니다.


이 일들을 하면서 여러 Android 버그들때문에 고생을 했고 또 그것들을 극복해 나갔습니다. 그 버그 중 하나는 HW-accelerated web views와 관련된 아주 치명적인 겁니다. 여러분이 웹뷰에 alpha를 세팅하면 안드로이드에서는 제대로 작동을 하지 않았었습니다. 이것을 제대로 작동시키기 위해서 여러 안드로이드 버그들을 컨트롤 해야만 했었죠. 이제는 HW-acceleration 과 함께 alpha를 콘트롤 할 수 있습니다.


다음에는 뭘까요?


이번주내에 오랫동안 저희의 발목을 잡아왔던 안드로이드의 Mapview와 관련해서 계획이 있습니다. 또한 Box2D library를 최신버전으로 업데이트 할 거구요 그렇게 함으로서 새로 선보이는 최근의 모든 joint type들을 지원하게 될 겁니다.

다음주에는 우리가 Mountain Lion 과 관련해서 일하면서 배운 것들에 대해 얘기를 해 드리겠습니다. 저희는 항상 안드로이드나 iOS 나 그 OS가 업그레이드 됨에 따라 여러분들에게 문제 없이 기능을 사용할 수 있도록 하기 위해 열심히 노력하고 있습니다.


==================================================================


이번주가 지나면 안드로이드에서도 Webview와 Mapview 모두 사용 가능해 지겠군요.

지금은 Corona SDK 프로젝트를 하고 있지 않아서 손 놓은지 오래 됐는데...

갑자기 이 기능을 이용해서 앱을 하나 만들어보고 싶네요.

마침 지금 하는 프로젝트가 Web App 작업이나까 같이 접목해서 여러 시도를 해 볼 수 있을 것 같은데요.

jQuery Mobile과 같이 작업을 할 수도있겠구요.


항상 열정을 가지고 발전하는 Corona SDK 화이팅 입니다.


반응형

멋진 무술...

2012. 7. 31. 10:10 | Posted by 솔웅


반응형

러시아 군용 무술이라는데...


진짜 실전용..

1~2초 내에 완전 적을 제압할 것 같아요...


저거 어디서 배울 수 있을까?





반응형


반응형

7 Great Tools to Build a Mobile App


HTML5를 잘 알고 있던지 하나도 모르던지 상관없이 여러분의 모바일 앱 개발을 도와줄 툴들이 있습니다.


올 초에 올린 아티클에서 얘기했듯이 스마트폰이나 태블렛 유저들중 49%는 local 정보를 찾기 위해 앱을 사용합니다. 그러니까 사업에 도움이 된다면 앱을 만들려고 하는 사람들이 많이 있겠죠. 단지 사람들이 좋아하는게 아니라 사업에 도움이 되는것 말이죠. 잘 디자인 된 비지니스 앱은 고객들에게 잘 홍보를 할 테고 그리고 앱을 통해 거래도 할 수 있겠죠.

앱을 만드는 건 간단한 일은 아닙니다. 돈도 많이 들구요. 그런데 이제 그런 시대는 갔습니다. 여러분들이 모바일 앱을 빨리 그리고 저렴하게 만들 수 있도록 도와주는 개발 플랫폼들이 많이 나왔습니다. 여기 7가지를 소개합니다. 다른것들도 아신다구요? 댓글에 달아 주세요.


Tiggzi



Tiggzi는 cloud-based HTML5 앱 빌더 입니다. iOS,ANdroid 그리고 모바일 웹앱 같은 거를 개발할 수 있죠. 드래그 앤 드롭 형식을 만들 수 있습니다. Tiggzi는 앱을 어떻게 생성하는지 interactive online tutorial을 통해 정보를 제공합니다. 또한 고객 서비스도 하고 있구요, 추가적인 리소스들과 관련해서 블로그들도 있습니다. non-developer 들에게는 아주 희소식이죠. Tiggzi Platform으로 개발해서 여러 store들에 앱을 업로드 하세요.

가격 : Tiggzi로 빌드하는 첫번째 앱은 무료입니다. 그 다음부터는 한달에 15불을 내면 3개의 프로젝트를 만들 수 있고 한달에 50불을 내면 무제한으로 만들 수 있습니다.





Buzztouch



새로운 개발자들을 위한 유저 코뮤니티가 아주 강력합니다. Buzztouch 플랫폼은 유저가 선택하면 independent로 있을 수도 있습니다. 웹 기반 소프트웨어는 Buzztouch를 이용해서 앱을 host 할 수 있습니다. 그들의 사이트를 사용할 수도 있고 Dropbox 같은 클라우드 스토리지 서비스 등을 사용할 수도 있습니다. 개발자들은 이 플랫폼을 이용해서 간단한것에서부터 복잡한 앱을 만들 수 있는데요. 아마 objective C나 Java 지식이 있으면 더 빨리 배울 수 있을 거예요.


가격: 얼마나 많은 앱을 빌드하고 필요한 기능이 무엇인지에 따라 무료에서부터 월 $9.99, $19.99, or $29.99 의 상품들이 있습니다. Buzztouch는 앱스토어나 마켓에 앱을 submit 하지는 않습니다. 그 과정은 여러분이 스스로 하셔야 합니다.



Titanium by Appcelerator


자바스크립트나 HTML5에 대해 아주 기초적인 지식만 가지고 있는 개발자도 Appcelerator의 Titanium을 사용할 수 있습니다. 이 툴은 native iOS, 안드로이드 앱 그리고 HTML5 모바일 웹 앱을 만드는데 도움을 줍니다. 이 플랫폼은 다양한 소스로부터 데이터, 콘텐트, 서비스등을 쉽게 통합할 수 있도록 해 줍니다. Appcelerator Cloud Service는 social, location, communication 그리고 content feature 등을 제공합니다. Titanium Studio는 앱 스토어에 submit 하도록 어플리케이션 패키지를 만드는 과정을 step by step으로 알려주는 wizard를 제공합니다. 


가격: www.appcelerator.com에서 무료 버전의 Titanium 을 다운 받으 실 수 있습니다. 추가적인 기능이나 support는 다양한 premium package로 제공하고 있습니다.




EachScape


EachScape는 초보자도 쉽게 iOS, Android, HTML5 앱을 빌드하고 매니지 할 수 있도록 도와주는 드래그 앤 드롭 플랫폼입니다. EachScape client는 NBC,CBS E!, Nivea와 켈로그 같은 top company들이 포함돼 있습니다. 이 플랫폼은 수 많은 3rd party 제품들을 활용할 수 있으며 비디오, overlay, social sharing, augmented reality, location, 광고, analytics 등등을 include 할 수 있습니다. Full-service 받으면 회사차원에서 앱을 빌드하는 것을 도와 줍니다. EachScape는 앱스토어에 올리거나 client에게 resell (영업) 하는 것 등을 도와 줄 겁니다.


가격 : Enterprise version은 월 2500 불서부터 시작됩니다. 보다 싼 lite 버전도 조만간 출시 될 겁니다.



TheAppBuilder


누구든이 이 툴을 이용하면 iOS, 안드로이드, 윈도우즈 폰 앱이나 모바일 웹 앱을 빨리 만들 수 있습니다. TheAppBuilder는 어떤 종류의 business인지 또는 어떤 종류의 organization인지에 따라 거기에 맞는 다양한 종류의 앱에 대한 탬플릿을 제공합니다. 여러분은 그냥 여러분이 넣고 싶은 contents, integrate social media feeds 등을 클릭하시면 됩니다. 몇분 후에는 웹앱을 publish 하실 수 있습니다. 앱스토어에 publish 하시려면 TheAppBuilder가 앱스토어에 올릴 수 있는 파일을 만들어 줄 겁니다.


가격 : HTML 웹 앱을 만들고 업데이트 하는 것은 공짜입니다. 앱스토어에 올리시려면 code files에 대해 $499불을 내셔야 합니다. 앱스토어에 있는 앱을 업데이트 하시려면 한달에 29불을 지불하셔야 합니다.



AppExpress


프로그래밍 경력이 없어도 AppExpress 를 이용하시면 앱을 만들 수 있습니다. 모듈을 선택하시면 여러분이 customize 해서 몇분안에 앱을 만들어 publish 할 수 있습니다. Small business를 위해 만들어 졌습니다. AppExpress는 여러분의 고객이 schedule appointment, 인보이스 지불, 거래하기 등등을 할 수 있도록 하는 앱을 만들 수 있게 해 줍니다. 리스트 내의 특정 고객이나 모든 고객에 메세지 보내기 등등의 기능도 있습니다. 유저나 벤더들도 파일등을 첨부해서 메세지를 보낼 수 있습니다. 예를 들어 유저는 사진을 첨부해서 여기에 설명을 달거나 그림을 그릴 수 있습니다.


가격: AppExpress.com에서 처음에 셋업 하는 비용 $199 하고 나면 월 $75 씩 냅니다.

Spaweek, User Friendly Media 같은 reseller를 통해서 셋업 하셔도 됩니다.



Corona SDK



Corona Lab's의 Corona SDK는 개발자들이 high-quality 앱을 만들도록 도와 줍니다. 그리고 iOS, 안드로이드, Kindle Fire, Nook 디바이스에서  사용할 수 있는 앱, 게임, eBook 들을 만들 수 있습니다. 코로나 SDK는 Lua 언어를 사용합니다. 배우기 쉽고 interactive 한 graphical content를 만드는 데 아주 좋은 언어죠. 150,000 명의 개발자가 전세계적으로 있고 활발한 커뮤니티 활동을 하고 있습니다. 코로나 SDK는 또한 회사 싸이트에 in-depth tutorial을 매주 post 하고 있습니다.


가격 : 무료 trial 버전이 있습니다. 가격을 지불하면 앱스토어 (마켓)에 publish 할 수 있습니다. 코로나 SDK는 연회비를 받고 있습니다. 이 연회비를 지불하면 여러분은 앱을 빌드하고 publish 할 수 있습니다. 연회비 $199 불을 내면 앱스토어나 구글 플레이 스토어 중 한군데에 업로드 하는 권한을 받고 $349 를 지불하면 두곳 모두에 업로드 할 수 있습니다.



반응형


반응형

10 handy jQuery mobile tips and snippets to get you started



새로운 기술은 가끔 처음 시작하는게 제일 어려울 수가 있는법이죠.

그런분들을 위해서 여기 jQuery Mobile library와 관련된 팁이나 트릭 그리고 관련된 간단한 샘플들을 여기 모아봤습니다.

처음 시작하시는 분들이 아실 필요가 없는 부분들은 과감히 건너 뛰었어요.


1. A full basic page

가장 기본이 되는 페이지의 full mark-up 입니다. 간단한 single page를 표현하시려면 여기 있는 코드가 가장 기본이 되는 겁니다.

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
</head>
<body>
<div data-role="page" id="home">
 <div data-role="header">
  <h1>Header</h1>
 </div>
 <div data-role="content">
  <p>Content goes here</p>
 </div>
 <div data-role="footer">
  <h4>Footer</h4>
 </div>
</div>
</body>
</html>



2. Where to add traditional jQuery calls


처음 시작할 때 모바일 플러그인이 trigger 되기 전에 뭔가 해야 되는게 있다는 걸 알게 됐습니다. 기본 jQuery 를 사용하고 싶었거든요.

그러면 모바일 plug-in을 참조하기 이전에 jQuery call을 넣어주시면 됩니다. 그러면 jQuery Mobile 보다 jQuery command가 먼저 실행이 되겠죠. 아래에 그 패턴이 있습니다.


<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script> $(document).ready(function() { // Your jQuery commands go here before the mobile reference }); </script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>




3. Disable AJAX navigation for all links at once


AJAX navigation은 아주 멋지죠. 그런데 가끔 이 기능을 disable 시킬 필요가 있을 때가 있어요. 이럴 때 AJAX navigation을 사용하지 말도록 할 수 가 있습니다.

헤더부분에서 jQuery mobile library를 reference 한 후 에 아래 코딩을 추가해 보세요.

jQuery mobile library가 먼저 load 되 있어야 합니다. 그러니까 반드시 그 다음에 넣어야 합니다.


<script> $(document).ready(function() { // disable ajax nav $.mobile.ajaxLinksEnabled = false; }); </script>




4. Stop some key items from being truncated


jQuery Mobile library의 기능 중 하나는 내용이 길면 알아서 UI element에 맞춰서 잘라준다는 겁니다.

그런데 두가지 경우에 이런 기능이 좀 불편해 질 때가 있더라구요. 첫번째는 full text를 보고 싶을 때구요. 두번째는 footer text 입니다. 이런것들에서 내용이 잘려서 "..."로 표시되면 좀 그렇죠.

이 두가지 경우에는 디폴트로 아래와 같은 CSS를 오버라이드 해 주세요.


For list items:

body .ui-li .ui-li-desc {
 white-space: normal;
 }

For footer content:

body .ui-footer .ui-title {
 white-space: normal;
 }

5. Use media queries to target devices

작업을 하면서 구현해야 할 것 중에 하나가 각 device 별로 어떻게 따로따로 CSS를 구현하느냐 입니다. 예를 들어 아이패드에서는 2개의 컬럼 레이아웃을 쓰고 싶고 스마트폰에서는 한개의 컬럼 레이아웃을 써야 할 때가 있잖아요.

이것을 구현하려면 media queries 를 사용하시면 됩니다.

이 미디어쿼리를 이용해서 각 스크린 사이즈 별 CSS를 구현하실 수 있습니다. 


아래 링크를 보시면 두개의 아주 훌륭한 아티클이 있습니다. 참조하세요.


6. Target platforms with jQuery


특정 디바이스에 특정 CSS를 실행해야 할 때가 있죠. 그리고 오직 jQuery 만 사용해야 될 떄가 있습니다. 여기 some code from Snipplr에서 가져온 코드가 있는데요. jQuery 로 유저 디바이스에 맞게 jQuery의 segment portion들을 쉽게 사용할 수 있도록 하는 방법입니다.

 var deviceAgent = navigator.userAgent.toLowerCase();
 var agentID = deviceAgent.match(/(iphone|ipod|ipad|android)/);
 if(agentID.indexOf("iphone")>=0){
  alert("iphone");
 }
 if(agentID.indexOf("ipod")>=0){
  alert("ipod");
 }
 if(agentID.indexOf("ipad")>=0){
  alert("ipad");
 }
 if(agentID.indexOf("android")>=0){
  alert("android");
 }

7. Use full paths for the targets of form action attributes

One quirk of the library seems to be its difficulty in finding target pages to post forms to… that is, unless you use the full path from the root of the website.

For example, I’ve found that this form tag never finds its target:

<form action=" form-handler.php " method="get" >

Whereas a full path like this works as expected:

<form action="/current-directory/form-handler.php" method="get" >

Also, be sure that the results from the form handler produce a full, valid jQuery mobile page, as shown in tip #1.


8. Create pop-up dialogs

jQuery Mobile library의 좋은 기능 중 하나는 built-in pop-up하고 dialog box 기능이죠. 정말 간단하고 쉽게 이용할 수 있습니다. 기본적으로 data-rel="dialog" 를 붙여주면 됩니다.

두가지만 기억하세요. 첫번째로 target page는 반드시 full-blown jQuery mobile page라야 합니다.

두번째는 제대로 작동을 하도록 하려면은 full separate page라야 한다는 겁니다.

<a href="#pop.html" data-rel="dialog">Pop up!</a> 

9. A “Cancel” + “Save” button combo


두개의 버튼을 나란히 넣어야 할 때가 있죠? 이럴 경우는 fieldset tag를 쓰시면 편리합니다.

그리고 두개의 버튼을 다른 theme으로 표현할 수도 있습니다.

이 코드는 여기에 있는겁니다. 자주 이용하기 때문에 저같은 경우는 따로 보관해 뒀다가 쓰고 있습니다.

<fieldset>
 <div><button type="submit" data-theme="c">Cancel</button></div>
 <div><button type="submit" data-theme="b">Submit</button></div>
</fieldset>

10. Create a column structure on your own


다양한 디바이스를 위한 single page structure에 대해 위에서 미디어 쿼리와 columns를 사용하는 방법을 위에서 알려 드렸죠.

다행히 웹 개발자들이 컬럼들을 어떻게 사용하는지에 대해 이전에 많이 만들어 놨었습니다. 이 기능들을 미디어쿼리와 같이 섞어쓰면 편하겠죠. 우리는 다양한 스크린사이즈에 맞게 다양한 structure를 쉽게 setup 할 수 있습니다.


Position Is Everything 은 이것을 하는데 가장 쉬운 방법을 알려 줍니다.







반응형


반응형

아래 글은 http://hardboiledwebdesign.com/ 을 만든 앤디가 자신이 몇개월간 작업하면서 만들어 놓은 CSS3 Media Query  관련 소스를 공개한 글 입니다.

앞으로 반응형 웹 작업을 하게 되면 아주 유용하게 쓰일 것 같습니다.

좋은 정보를 공유해 준 앤디에게 감사하면서 이 정보를 제 블로그에 정리해 둡니다.


Hardboiled CSS3 Media Queries

제가 책을 launch 하기 위해  Hardboiled Web Design 웹사이트를 만들면서 CSS3의 Media Query를 사용해서 responsive layout을 만드는 것은 아주 많은 일을 해야 되는 작업이었습니다.

지난 몇달간 Media Query를 사용하면서 각 프로젝트마다 여러번 그 소스들을 고쳤었습니다. 그래서 아예 표준문안처럼 만들어 놓으면 다음에 사용할 때 편할거라고 생각했죠.

이 hardboiled CSS3 Media Queries들은 각 디바이스들에 대한 empty placeholder들 입니다. 이걸 이용하면 당장 responsive 디자인을 시작할 수 있죠.

이것은 책을 내면서 같이 선사하는 toolkit이었습니다.

그리고 여러분들은 지금 이 소스를 다운로드 받으시고 오버라이드해서 마음대로 사용하실 수 있습니다.


Download the CSS file




/* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) { /* Styles */ } /* Smartphones (landscape) ----------- */ @media only screen and (min-width : 321px) { /* Styles */ } /* Smartphones (portrait) ----------- */ @media only screen and (max-width : 320px) { /* Styles */ } /* iPads (portrait and landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) { /* Styles */ } /* iPads (landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) { /* Styles */ } /* iPads (portrait) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) { /* Styles */ } /* Desktops and laptops ----------- */ @media only screen and (min-width : 1224px) { /* Styles */ } /* Large screens ----------- */ @media only screen and (min-width : 1824px) { /* Styles */ } /* iPhone 4 ----------- */ @media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) { /* Styles */ }

물론 하나의 스타일쉬트 파일에 방대한 responsive design style들을 넣고 싶지 않으실 겁니다.

이럴 경우 여러 스타일쉬트 파일로 소스를 구분하시고 html 파일에서 link element를 사용하시면

좋으실 겁니다.

<head>

<link rel="stylesheet" href="smartphone.css" 
media="only screen and (min-device-width : 320px) 
and (max-device-width : 480px)">

<link rel="stylesheet" href="smartphone-landscape.css" 
media="only screen and (min-width : 321px)">

<link rel="stylesheet" href="smartphone-portrait.css" 
media="only screen and (max-width : 320px)">

<link rel="stylesheet" href="ipad.css" 
media="only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px)">

<link rel="stylesheet" href="ipad-landscape.css" 
media="only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : landscape)">

<link rel="stylesheet" href="ipad-portrait.css" 
media="only screen 
and (min-device-width : 768px) 
and (max-device-width : 1024px) 
and (orientation : portrait)">

<link rel="stylesheet" href="widescreen.css" 
media="only screen and (min-width : 1824px)">

<link rel="stylesheet" href="iphone4.css" 
media="only screen 
and (-webkit-min-device-pixel-ratio : 1.5), 
only screen and (min-device-pixel-ratio : 1.5)">

</head>

Download the CSS file and any comments or suggestions for future improvements would be more than welcome.

Sign-up for email alerts or follow @itshardboiled for more updates and sneak previews.



반응형

'etc. > Responsive Web' 카테고리의 다른 글

자바스크립트 기초 메모  (0) 2016.03.24


반응형

이 persistence toolbars 는 아래 샘플 예제로 대신합니다.

원레 jQuery Mobile Tutorial 페이지에도 설명은 없고 예제만 있습니다.


Search 란에 텍스트를 입력하면 autocomplete 기능이 적용이 되서 쉽게 Search를 할 수 있게 해 줍니다.


아래 있는 예제는 JQM 튜토리얼 페이지에서 소스를 그냥 긁어온 거라서 깔끔하지는 않습니다.


사용하시려면 깨끗하게 정리하거나 다른곳에서 제대로 된 소스를 받으시면 좋을 거예요.


저는 그냥 jQuery Mobile 공식 튜토리얼을 공부하면서 이런 개념이 있다는 걸 알기 위해서 그리고 그 정보를 이렇게 글로 남기고 나중에 찾아보기 편하도록 하기 위해서 샘플 파일들을 올려 놓습니다.





persistent.html


반응형


반응형

Methods



fixedtoolbar 플러그인은 아래와 같은 메소드들을 가지고 있습니다.


show show the toolbar 

 $("[data-position='fixed']").fixedtoolbar('show');

Note: 이전 버전에서는 아래 신택스로 툴발를 show 하는데 사용했습니다. 하지만 현재는 더이상 지원하지 않고 있습니다.


$.mobile.fixedToolbars
   .show(true);
 
hide hide the toolbar (만약 fullscreen 툴바가 아니라면 static positioning으로 toggle back 할 겁니다. 스크롤에 딸 보일수도 있고 안 보일 수도 있겠죠)

$("[data-position='fixed']").fixedtoolbar('hide'); 
 


toggle toolbar가 visible 일 경우 show와 hide 메소드를 call 합니다.

$("[data-position='fixed']").fixedtoolbar('toggle'); 
 
updatePagePadding . 툴바의 height를 match 시키기 위해 툴바의 page element parent의 패빙을 업데이트 합니다.

$("[data-position='fixed']").fixedtoolbar('updatePagePadding');
		   				

툴바를 re-position 하는 updatelayout event 가 있습니다. 콘텐트를 현재의 페이지에 넣기 위한 다이나믹 어플리케이션을 개발하는 개발자는 이 updatelayout  이벤트를 manually trigger 할 수 있습니다. 그러면 그 페이지의 컴포넌트가 방금 추가된 새로운 콘텐트를 업데이트 하도록 합니다. 이 이벤트는 collapsible, listview filter 플러그인 에서 내부적으로 사용되고 아주 강력합니다. 왜냐하면 어떤 위젯도 이 updatelayout 이벤트를 listen 하도록 할 수 있거든요.


destroy destroy at fixedtoolbar (restore the element to its initial state)

$("[data-position='fixed']").fixedtoolbar('destroy'); 


Events


fixedtoolbar 플러그인에는 아래와 같은 custom 이벤트가 있습니다.

fixed toolbar 가 생성될 때 트리거 생성

$( ".selector" ).fixedtoolbar({
   create: function(event, ui) { ... }
});		
						



반응형


반응형

fixedtoolbar 플러그인에는 다음과 같은 옵션들이 있습니다.


visibleOnPageShow boolean

default: true

이것은 parent page 가 보일 때 이 툴바를 보이게 할지 말지를 결정합니다. 이 옵션은 data-visible-on-page-show="false" 로 사용할 수 있고 아래와 같이 아용할 수도 있습니다.

$("[data-role=header]").fixedtoolbar({ visibleOnPageShow: false });

disablePageZoom boolean

default: true

이것은 사용자가 페이지를 zoom in/out을 할 수 있도록 할지 말지에 대해 컨트롤 합니다.

data-disable-page-zoom="false"  

$("[data-role=header]").fixedtoolbar({ disablePageZoom: false });

transition string

default: "slide" (which ends up using slideup and slidedown)

fixed toolbar를 보이고 숨기고 하는데 사용 될 transition. 여기에 들어갈 수 있는 값들은 none, fade, slide 가 있습니다. (여러분이 직접 만든 CSS 트랜지션을 사용할 수도 있습니다.)

data-transition="fade"

$("[data-role=header]").fixedtoolbar({ transition: "fade" });



fullscreen boolean

default: false

Fullscreen fixed toolbar는 visible 상태라면 항상 content  위에 떠 있게 됩니다. 일반 fixed toolbar와는 다르죠. fullscreen toolbar는 toggle 했을 때 다시 fall back 되지 않습니다. 스크린에서 완전히 사라지지 않는다는 거죠. 이 툴바는 photo viewer 같이 사진으로 전체 화면을 채우거나 할 떄 유용하게 사용하실 수 있습니다. This page로 가시면 구현된 화면을 보실 수가 있습니다. 

data-fullscreen="true"

$("[data-role=header]").fixedtoolbar({ fullscreen: true });

Note:이 data-attribute 신택스는 페이지 element가 아니라 toolbar element 에서 사용하셔야 됩니다.


tapToggle boolean

default: true

유저가 스크린을 Tap 할 때마다 툴바가 토글 기능으로 보였다 안 보였다 하도록 할지 말지를 정해 줌.

data-tap-toggle="true"

$("[data-role=header]").fixedtoolbar({ tapToggle: true });

Note: 이 behavior는 다음과 같이 configuration 할 수 있습니다. 1.1에서는 더이상 이 신택스를 지원하지 않습니다.

	
$.mobile.fixedToolbars
   .setTouchToggleEnabled(false);
 
tapToggleBlacklist string

default: "a, .ui-header-fixed, .ui-footer-fixed"

jQuery selector의 리스트를 tap 했을 때 툴바가 토글되지 않도록 합니다.

$("[data-role=header]").fixedtoolbar({ tapToggleBlacklist: "a, input, select, textarea, .ui-header-fixed, .ui-footer-fixed" });

hideDuringFocus string

default: "input, select, textarea"

 jQuery selector가 선택됐을 때 툴바를 hide 됩니다. fixed toolbar 일 경우는 제외입니다.

$("[data-role=header]").fixedtoolbar({ hideDuringFocus: "input, select, textarea" });

updatePagePadding boolean

default: true

툴바는 담고있는 내용에 따라서 height가 달라질 수 있습니다. 이 옵션은 페이지 엘리먼트의 패딩을 자동적으로 업데이트 해 줍니다. 그럼으로서 툴바는 문서내에서 알맞는 공간을 확보할 수 있게 되는 거죠. enable 상태일 경우에는 여러 경우에 패딩이 업데이트 됩니다. 예를 들어 pageshow, 페이지 전환, resie, orientation change 등등. 툴바의 EM height 에 match 되게 페이지의 div 패딩을 세팅하는 CSS를 추가하고 이 옵션을 disable 하게 되면 여러분 나름대로의 optimization에 유리합니다. .ui-page-header-fixed { padding-top: 4.5em; }.

This option is also exposed as a data attribute: data-update-page-paddinge="false"

$("[data-role=header]").fixedtoolbar({ updatePagePadding: false });

supportBlacklist function

default: function that returns a boolean value

CSS position: fixed 지원은 테스트하기가 아주 어렵습니다. 사실 1.1 버전이 출시 됐을 때 제대로 된 테스트 방법이 알려져 있지 않았습니다. 이 옵션은 position: fixed 관련해서 문제가 있다고 알려진 대중적인 플랫폼의 opt-out을 시도하기 위한 함수입니다. 종종 이 플랫폼들은 부분적으로 position:fixed 를 지원합니다. 전혀 지원하지 않는 것 보다는 낫죠? 이 로직을 여러분의 blacklist 로직에 오버라이드 하려면 initialization 될 때 call 해서 true나 false를 리턴하는 함수를 제공하면 됩니다. 반드시 이것을 mobileinit에 세팅해야 합니다. 그래야 플러그인이 initially created 될 때 apply 됩니다.


$( document ).bind("mobileinit", function(){
  $.mobile.fixedtoolbar.prototype.options.supportBlacklist = function(){
    var result;
    // logic to determine whether result should be true or false
    return result;
  };
})

initSelector CSS selector string

default: ":jqmData(position='fixed')"

이것은 selector를 define 할 때 사용됩니다. (element types, data roles, etc.) 그러면 자동적으로 fixed toolbar로 initialize 되게 됩니다. 어떤 element가 initialized 될지 수정하시려면 이 옵션을 mobileinit event에 바인드 해 주세요.

$( document ).bind( "mobileinit", function(){
	$.mobile.fixedtoolbar.prototype.options.initSelector = ".myselector";
});


반응형

Fixed toolbars

2012. 7. 28. 22:02 | Posted by 솔웅


반응형

Fixed toolbars


CSS position을 지원하는 브라우저(대부분의 데스크탑 브라우저들과 iOS5+ 안드로이드 2.2+, 블랙베리 6 등등)에서는 fixedtoolbar 플러그인을 사용하는 fixed toolbar들은 viewport의 top이나 bottom에 fix 될 겁니다. 그 페이지의 content는 자유롭게 스크롤 되도 그 툴바는 top이나 bottom에 fix 돼 있을 겁니다. fixed positioning을 지원하지 않는 브라우저에서는 같이 따라서 움직일 겁니다.


헤더나 footer에 이 기능을 적용하려면 data-position="fixed" attribute를 jQuery Mobile의 header 나 footer element에 추가하시면 됩니다.


헤더를 fixed 시키는 예제


<div data-role="header" data-position="fixed">
	<h1>Fixed Header!</h1>
</div>		


footer를 Fixed 시키는 예제 :


<div data-role="footer" data-position="fixed">
	<h1>Fixed Footer!</h1>
</div>


Fullscreen Toolbars


Fullscreen fixed toolbars는  visible일 경우 항상 content 위에 위치하게 됩니다. 일반적인 fixed toolbar와는 좀 다르죠. fullscreen toolbar는 toggle 됐을 때 그 위치가 바뀌지 않습니다. 스크린에서 완전히 사라지지가 않죠. Fullscreen toolbar는 photo viewer같이 photo로 전체 스크린이 꽉 차야 되는 그런 인터페이스에 잘 어울리는 기능입니다. 

fixed header나 footer에 이 기능을 사용하시려면 data-fullscreen attribute 를 그 element에 추가하시면 됩니다.


<div data-role="header" data-position="fixed" data-fullscreen="true">
	<h1>Fixed Header!</h1>
</div>


Forms in toolbars


jQuery Mobile 1.1에서는 static toolbar안에서 모든 form element가 제대로 작동하도록 테스트 중에 있습니다. 그러니까 fixed toolbar나 fixed element가 사용되는 어느 곳에서든 form element를 사용하실 때에는 충분히 테스트 해 줄것을 권고합니다. 그래야만 다양한 모바일 브라우저에서 예측할 수 없는 어떤 이슈가 발생하는 것을 줄일 수 있을 겁니다.


Changes in jQuery Mobile 1.1

jQuery Mobile 1.1 버전 이전에는 fixed header 효과를 위해 dynamically re-positioned toolbar를 사용했었습니다. 왜냐하면 아주 일부의 모바일 브라우저에서면 fixed CSS property 를 지원했었거든요. 그리고 유사 fixed 도 fake 자바스크립트 overflow-scrolling behavior를 통해서 지원이 됐었기 때문에 충분히 효과를 내지를 못했습니다. 그래서 특정 플랫폼에서는 아주 자연스럽지 못했었죠. 이런 behavior는 바람직하지 않습니다. 그래서 jQuery Mobile 1.1 에서는 좀 더 폭넓게 지원될 수 있도록 fixed toolbar에 대한 새로운 접근법을 사용했습니다. 이 framework은 다른 많은 대중적인 플랫폼에서 진짜 fixed toolbar를 지원해 줄 것을 원하고 있습니다.


Polyfilling older platforms


fixed toolbar plugin은 CSS position을 지원하지 않는 플랫폼에서 자연스럽게 거기에 맞게 기능을 합니다. iOS4.3 같은 곳에서도 제대로 fixed 되죠. 그 플랫폼에서 show/hide behavior를 포함한 fixed toolbar의 지원이 필요하다면 Filament Group이 개발한 polyfill을 사용하실 수 있습니다.




여러분이 제안할 개선점이 있다면 github의 gist에 그 내용을 올려주세요.

jQuery Mobile을 reference 한 다음에 CSS와 JS 파일들을 include 하세요. 그러면 fixed toolbar가 iOS4.3에서도 jQuery Mobile 1.0 에서와 비슷하게 작동할 겁니다.


Known issue with form controls inside fixed toolbars, and programmatic scroll


iOS5와 몇몇 안드로이드 플랫폼에서는 잘 알려지지 않은 이슈들이 있습니다. 이 이슈들은 fixed-positioned 콘테이너 안에 위치한 form을 컨트롤 할 때 나타나는 현상인데요. 윈도우가 프로그램적으로 스크롤이 될 때 그 hit area를 잃는 경우가 있습니다. (window.scrollTo 같은 기능을 사용할 때). 이건 jQuery Mobile의 이슈는 아니지만 그것 때문에 jQuery Mobile 기능이 제대로 작동하지 않는 경우가 있습니다. 그러니까 될 수 있는대로 jQuery Mobile fixed toolbar 안에 form control을 사용할 떄는 프로그램적으로 스크롤을 하지 말 것을 권고 드립니다. Device Bugs project tracker의 This ticket이  이 문제에 대해 보다 자세히 설명을 하고 있습니다.


Known issues in Android 2.2/2.3


안드로이드 2.2와 2.3의  implementation of position: fixed; 는 styles와 markup 패턴들과 관련되지 않은 conjunction 이 될 수도 있습니다. 왜냐하면 여러 이상한 에러들이 있거든요. 특히 position: fixed element 내의 absolute element 같은 포지션일 경우 그렇습니다. 저희는 라이브러리의 범위내에서 발생하는 이런 버그들을 제대로 고치려고 노력을 하고 있습니다. 하지만 custom styles에서는 여러 이슈들을 유발할 수 있습니다.


  • 다른곳에 있는 Form element들은 (특히 select 메뉴 같은 것) fixed position안에 위치한 empty absolute position 으로 세팅됐을 때 user와의 interaction이 fail 날 수 있습니다. 드물지만 (대개 안드로이드 2.2에서 일어나는데) 이런 경우 그 부분에서만 fail이 일어나는게 아니라 전체 페이지의 모든 기능에서 fail이 일어나기도 합니다. 이런 경우 absolute position 된 element들에 아무 character라도 add 해서 (non-breaking space나 어떤 경우엔 그냥 whitespace를 추가해도) 해결 할 수는 있습니다.

  • 위에 언급된 이슈는 fixed position element 내의 absolute position된 이미지의 경우에도 발생할 수 있습니다. 대개 그 이미지의 inherent dimensions과 관련해서 에러가 발생합니다. CSS를 이용해서 height와 width 가 정해 진다거나 image src 가 invalid (그래서 inherent height와 width 가 없는) 경우 이러한 일이 발생합니다. 예를 들어 그 이미지가 50X50이고 fixed element로 위치가 정해졌고 그 inherent dimension을 그대로 사용할 때 이러한 현상은 일어나지 ㅇ낳습니다.

  • position: fixed element가 페이지의 어느곳에서든 나타날 때 대부분의 2D CSS transform은 fail 될 겁니다. 특이하게 오직 translate transform 만 이 경우에 해당되지 않는 것 같습니다. 더 특이한 점은 이 이슈는 CSS opacity를 9나 그 이하로 세팅하면 해결된다는 겁니다.

  • position: fixed 와 overflow 프로퍼티의 조합은 가장 피해야 할 상황입니다. 이 두 기능은 Android OS의 구 버전에서 예측하지 못하는 이슈들을 야기하기 때문입니다.

  • position:fixed element 내에 위치해서 on-screen keyboard를 불러오는 element들은 default keyboard를 사용하지 않고 다른 것을 사용할 때 user input 기능이 fail 됩니다 .Swype, XT9 등도 여기에 해당됩니다.


저희들은 이 버그들을 해결하기 위해 지속적으로 노력하고 있습니다. 우리는 모든 안드로이드 native browser에서 충분한 테스트를 거치지 않고 복잡한 user styles과 form element를 포함하고 있는 fixed toolbar들을 implementing 하지 말것을 권고드립니다 .

다음과 같은 페이지들은 fixed toolbar와 form element들과 관련해서 테스트를 한 페이지들 입니다. : demo app, text inputs, search inputs, radio toggles, checkbox toggles, slider, select, and buttons.


No longer supported: touchOverflowEnabled

이전버전인 jQuery Mobile 1.1에서 지원했던 true fixed toolbar는 CSS 프로퍼티인 overflow-scrolling:touch에 대해 native browser가 지원하는지에 대한 contingent 였습니다. 지금은 이 기능이 iOS5에서만 지원이 되고 있죠. 이 CSS 프로퍼티는 더 이상 사용되지 않습니다. 우리는 프레임워크에서 이 프로퍼티의 모든 internal usage를 없앴습니다. 하지만 이미 이 기능을 사용하고 있는 어플리케이션에서 문제가 발생하지 않도록 $.mobile 객체에 global 한 정의는 남겨 뒀습니다. 이 프로퍼티는 removal로 flag 되 있습니다. 그러니 더 이상 이 코드를 사용하지 않도록 업데이트 해 주세요. 이 프로퍼티의 support test는 $.support 하에서 그 정의가 남아 있고요 아직까지는 이 기능을 remove 할 계획은 없습니다.



The rest of the page is just sample content to make the page very long

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

And an inset list




Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.

Embedded form





A bit more text

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.Donec non enim in turpis pulvinar facilisis. Ut felis.


-----------

위에 내용도 번역하려고 보니까 이게 영어가 아니네요.

왜 갑자기 이게 영어가 아닌걸로 변했는지.. 아니면 원래 저랬는지 몰겠지만.. 조금 황당...

원래 jQuery Mobile 웹사이트를 가도 이렇게 돼 있더라구요.

보니까 제목이 The rest of the page is just sample content to make the page very long 네요.

이 페이지의 나머지 부분은 그냥 페이지를 길게 만들려고 넣은 샘플 내용이라고 하네요.

이게 왜 있는지 좀 이상.... 잠깐 당황했음...

반응형


반응형
Posted on

. Written by



수요일 입니다. FAQ 시간이죠. 아래 5가지 자주 나오는 질문을 모아봤습니다.


1. What is the proper way to use Facebook.showDialog?


showDialog API는 어떤 것이 sent/posted 되는지에 대해 유저가 메세지를 넣을 수 있도록 dialog screen을 불러 옵니다. 이 API는 action 파라미터를 필요로 하죠. 이 파라미터는 feed나 apprequests 중 하나가 될 수 있습니다. 만약 apprequests가 사용된다면 message 파라미터가 있어야 됩니다. 아니면 fail 되죠. 아래 예제가 있습니다.


facebook.showDialog( "apprequests", {
    message = "Example message."
} )


2. The Single Sign On (SSO) for iOS is not working. What can cause this?


build.settings 파일 안에 있는 UIApplicationExitsOnSuspend key가 false 로 세팅돼 있어야 합니다. false 가 디폴트 입니다. 그런데 어떤 유저들은 이 key를 include 해서 true로 세팅하기도 합니다. 그렇게 되면 SSO fail이 일어나는 거죠.

그리고 build.settings 파일 안에 Facebook App ID 도 있어야 합니다. 어떻게 하는지에 대한 것은 Jonathan’s blog post 를 봐 주세요.


3. My users are having to re-logon every few hours into Facebook from my app. Is there anything I can do to extend the time?


예 페이스북 앱 set-up 페이지에서 “Remove offline_access permission”를 enable 하도록 만들 수 있습니다. https://developers.facebook.com/apps/ 로 가셔서 페이지 우상단에 있는 “Edit App” 버튼을 클릭하세요. 이제 Setting 메뉴 아래에 있는 Advanced 를 클릭하세요. 아래 화면을 보실 수 있을 겁니다. “Remove offline_access permission” 이 enabled 돼 있는지 확인하세요. 그러면 logon token을 60일동안 연장해 줄 겁니다.





4. How can I tell when the Facebook token will expire?


Corona Facebook API listener는 event.phase == “login” 일 때 event.expiration 안의 token expiration time을 return 합니다. 아래 코드대로 하면 expire 될 때까지 며칠이 남았는지 표시해 줄 겁니다.


print( ">>> Token expires in " ..
    os.difftime( event.expiration, os.time() )/86400 .." days" )


5. I’m getting a log-on error when I enable Facebook’s Single Sign On (SSO) for Android. How do I generate the “Android Key Hash?”


만약 안드로이드 앱에서 Single sign on (SSO)이 enable 돼 있다면 이것은 fail 될 겁니다. 왜냐하면 맞는 hash key를 supply 하지 않았기 때문입니다. 이러면 아마 logon 하려고 할 때 ADB logcat에 다음과 같은 메세지가 뜰 겁니다. 

“invalid_key:Android key mismatch. Your key “PGv8R2vDQ/w6hexLxdefWKxcYLS” does not match the allowed keys specified in your application settings. Check your application settings at http://www.facebook. … “


당신의 key가 뭐가 되야 되는지는 ADB를 이용해서 알아낼 수 있습니다. 더 간단하게 하려면 그냥 logcat terminal window에 있는 key string을 복사해서 여러분의 안드로이드 key hash를 필요로하는 페이스북 앱 페이지에 붙여 넣으세요.  그냥 123을 입력하고 앱을 돌리면 logcat이 맞는 hash key를 output 해 줄겁니다.

https://developers.facebook.com/apps/ 로 가셔서 페이지 우상단에 있는 “Edit App” button을 클릭하세요.  그러면 Android SSO 세팅과 관련 된 Basic 페이지로 가게 될 겁니다.






SSO를 지원하지 않는 디바이스에 있는 옛날 페이스북 앱이 있다면 log-in call은 페이스북 앱을 call 하는 대신에 로컬 웹 팝업이 뜰 겁니다. 이 경우에는 hash key가 사용되지 않습니다.


만약 유저가 SSO를 지원하는 것으로 그들의 페이스북 앱을 업그레이드 했다면 그 유저는 여러분 앱에서 로그아웃을 해야 합니다. 안 그러면 token 은 incorrect 되고 request/dialog API 은 fail 되겠죠. 왜냐하면 invalid token 때문입니다. (코로나는 그 token을 바로 직전의 성공한 로그인에서 저장하고 이것을 모든 API call 에 사용합니다.)


여기까지가 오늘의 내용입니다. 즐거우셨길 바라고 뭔가 모르는 부분을 알게 되는 기회가 됐기를 바랍니다.



반응형