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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

우아하게 화면 scroll 하기

2012. 12. 20. 05:55 | Posted by 솔웅


반응형

.animate()   와 .scrollTop()


웹 앱을 개발하다 보면 textfield 를 사용하는 경우가 많이 있습니다.

그리고 이 textfield 가 있는 화면을 모바일 디바이스에서 사용하려면 screen keyboard를 사용해야 되죠.
평상시에는 별 문제가 없는데 이걸 autocomplete 기능과 같이 사용하게 되면 문제가 발생할 수도 있습니다.

screen keyboard 가 리스트의 일부 아이템을 가려버려서 유저가 그 아이템을 클릭할 수 없게 될 수 있거든요.




화면 키보드 밑에 아이템이 깔려 있습니다.

이럴 경우 scroll 이 안되는 layout 하면이라면 유저가 많이 불편하겠죠.

이럴경우 jQuery 의 .animate() 과 .scrollTop() 함수를 사용하면 아주 우아하게 화면을 스크롤 업해서 유저 친화적인 인터페이스를 제공할 수 있습니다.
보통 자바스크립트의 window.scrollTo(x, y);를 사용하셔도 되는데요. 좀 더 자연스럽게 움직이도록 하기 위해 이 두 메소드를 사용하면 좋습니다.

저는 아래와 같이 사용했습니다.

$('body,html').animate({scrollTop: 160 }, 900);

textfield 에 focus 가 가서 키보드가 올라왔을 때.


$('body,html').animate({scrollTop: 0 }, 500);

키보드가 다시 내려갔을 때 화면을 다시 원상 복구 함.

숫자는 마음대로 넣으시면 됩니다.

이해를 돕기 위해 우선 .animate() 함수 예제를 볼까요?


<!DOCTYPE html>
<html>
<head>
  <style>
div {
background-color:#bca;
width:100px;
border:1px solid green;
}
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <button id="go">&raquo; Run</button>

<div id="block">Hello!</div>
<script>

/* Using multiple unit types within one animation. */

$("#go").click(function(){
  $("#block").animate({
    width: "70%",
    opacity: 0.4,
    marginLeft: "0.6in",
    fontSize: "3em",
    borderWidth: "10px"
  }, 1500 );
});
</script>

</body>
</html>


#go 를 클릭하면 width 가 화면의 70%로 늘어나고 투명도도 바뀌고 폰트 사이즈, border 굵기 등이 바뀝니다. 이 동작은 1.5초 동안 일어납니다.


tistory551_01.html


위 파일을 다운 받아서 실행해 보세요.

예제 하나 더 보면요.


<!DOCTYPE html>
<html>
<head>
  <style>
div {
  position:absolute;
  background-color:#abc;
  left:50px;
  width:90px;
  height:90px;
  margin:5px;
}
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <button id="left">&laquo;</button> <button id="right">&raquo;</button>
<div class="block"></div>

<script>
$("#right").click(function(){
  $(".block").animate({"left": "+=50px"}, "slow");
});

$("#left").click(function(){
  $(".block").animate({"left": "-=50px"}, "slow");
});

</script>

</body>
</html>


#right, #left 를 클릭하면 .block을 각각 50픽셀씩 오른쪽 혹은 왼쪽으로 움직이는 소스입니다.


tistory551_02.html

.scrollTop()에 대한 예제도 보죠.


<!DOCTYPE html>
<html>
<head>
 
<style>
div
.demo {
background
:#CCCCCC none repeat scroll 0 0;
border
:3px solid #666666;
margin
:5px;
padding
:5px;
position
:relative;
width
:200px;
height
:100px;
overflow
:auto;
}
  p
{ margin:10px;padding:5px;border:2px solid #666;width:1000px;height:1000px; }
 
</style>
 
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
 
<div class="demo"><h1>lalala</h1><p>Hello</p></div>
<script>$("div.demo").scrollTop(300);
</script>

</body>
</html>

tistory551_03.html


이 예제를 실행하면 작은 화면안에 페이지가 위에서 300픽셀 내려간 부분이 중앙이 되도록 display 할 겁니다.


이 두개를 조합해서 사용한 예제도 하나 올릴테니까 다운 받아서 보세요.

scroll-to-top.zip


반응형


반응형

Posted on . Written by



구글 맵이 돌아왔습니다. 우리의 Corona iOS 앱에서 오늘 사용할 수 있습니다.

12-12-12 에 진짜 세계를 뒤 흔든 건 아이폰에 새 Google Maps app이 릴리즈 된 겁니다. 별로 신통치 않은 애플 맵을 대신 할 수 있게 됐죠. 구글은 turn-by-turn direction, vector based map tiles, 개선된 인터페이스 등을 새로 선보였습니다.



The URL Scheme


먼저 URL scheme의 origin 에 대해 알아보죠. WWW(World wide Web)이 처음 선보인  1990년대로 돌아가보죠. 개발자들은 뭔가 인터넷에서 어떤 것을 참조할 필요가 있었습니다. 그래서 그 참조할 정보의 위치를 간단하게 URL( Uniform Resource Locator)을 이용해서 찾아갔죠.


인터넷 상에서 access 할 수 있는 방법은 여러가지가 있습니다. 그리고 그것들은 단지 web page나 이미지들만이 아닙니다. terminal session을 열어서 Gopher 서비스에 연결할 수도 있고 FTP 서버로부터 파일을 다운로드 받을 수도있고 이메일 메세지를 보내고 하는 것들을 인터넷으로 할 수 있습니다.


colon 전의 URL 부분을 URL scheme이라고 합니다. 그 종류는 아래와 같습니다.

  • http: — a file from a web server
  • https: — a file from an encrypted web server
  • mailto: — send an email message
  • ftp: — access a file via FTP
  • telnet: — open terminal sessions to a server


iOS 에서는 이메일 안에 있는 전화번호를 touch 해서 dialer 를 열고 전화를 걸 수가 있습니다. 이런 기능들은 아래와 같은 URL schemes 를 사용해서 구현 합니다.


  • tel: — make a phone call
  • sms: — send a text message
  • itms-apps: — opens the app store
  • music: — go to the current playing song in the music app


애플은 애플리케이션이 자기 자신만의 scheme 을 define 하도록 합니다. 그래서 다른 앱에서 그 앱을 열수 있도록 허용합니다. Corona Labs 는 1년전에 이 기능을 제공했습니다. 이와 관련 된 글을 보시려면 여기를 클릭하세요.



Google Maps URL Scheme


Maps app 에 빠르게 접근하도록 하기 위해 Google 은 여러분 앱이 접근 가능하도록 URL scheme 을 사용합니다.


comgooglemaps:


물론 URL scheme 은 URL 의 일 부분입니다. 여기에 추가로 host 이름과 호스트상의 리소스들을 가집니다. 앱이 실제로 host name 이 없고 개별 파일로 접근할 필요가 없으면 full URL 은 아래와 같습니다.

comgooglemaps://


코로나에서는 이 API 를 아래와 같이 사용하시면 됩니다.


system.openURL("comgooglemaps://")



여러분의 앱은 suspend 상태가 되고 구글 맵이 시작될 겁니다. 간단하죠? 구글 맵에서 근처 피자가게를 찾고 싶으세요? 혹은 구글 맵에서 할 수 있는 다른 것을 여러분 앱에서 directly 하고 싶으세요?


URL scheme 에 다른 추가적인 정보를 덧붙이면 여러분 앱 안에서 그런 특정 기능을 사용하도록 하실 수 있습니다.





1. Map Coordinates and Traffic View


아래의 코드가 기본 형식입니다.

system.openURL("comgooglemaps://?center=40.765819,-73.975866&zoom=14&
views=traffic")




이렇게 하면 맵을 열고 traffic 상태를 보여 줍니다. 그리고 zoom level 은 14 이고 위도 경도는 40.7N and 73.9W 인 지점이 화면 가운데에 위치할 겁니다. 이 에제는 뉴욕의 센트럴 파크의 위치를 보여 줄 겁니다.

잘 보시면 첫번째 파라미터 전에 물음표가 있는것을 알아 채셨을 겁니다. 그리고 각 파라미터 사이는 &로 구분하구요. 그러니까 이 파라미터들을 분해하면 아래와 같이 되겠죠.


?center=40.765819,-73.975866   --center map at these coordinates
&zoom=14                       --zoom to level 14
&views=traffic                 --show traffic view


2. Map “Street View”

여기에 mapmode=streetview parameter를 추가하면 street view를 보실 수 있습니다.


system.openURL("comgooglemaps://?center=40.765819,-73.975866&
zoom=14&views=traffic&mapmode=streetview")


3. Map Query


맛있는 피자를 원하세요? 그러면은 q=pizza를 다른 파라미터 전에 추가히세요.


system.openURL("comgooglemaps://?q=pizza&center=40.765819,-73.975866")


4. Driving Directions


A 지점에서 B 지점까지의 경로는 어떻게 알 수 있을 까요?


system.openURL("comgooglemaps://?saddr=Google+Inc,+8th+Avenue,+New+York,+NY&
daddr=John+F.+Kennedy+International+Airport,+Van+Wyck+Expressway,
+Jamaica,+New+York&directionsmode=transit")



딱 보면 무지 복잡해 보이죠? 근데 자세히 보면 그냥 위와 같이 파라미터를 사용했을 뿐이예요.


?saddr=...         --"s" for "starting address"
&daddr=...         --"d" for "destination address"
&directionsmode=



+ 부호는 전부 다 뭘까요? 여기서 space 를 사용하면 문제가 발생할 수 있습니다. 그 space 를 + 부호로 대신 사용하는 겁니다. 아니면 hex code %20를 사용하셔도 됩니다.

근데 진짜 + 부호를 넣어야 되면 어떻게 할까요? 그럴 때는 hex code %2B 을 사용하셔야 됩니다.


Convenience Function


이렇게 파라미터를 추가하는게 짜증나시면 URL 을 encode 하는 함수를 사용하실 수도 있습니다.



function urlencode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w ])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end

system.openURL("comgooglemaps://?saddr=" .. 
urlencode("Google Inc., 8th Avenue, New York, NY") ..
"?daddr=" .. urlencode("John F. Kennedy International Airport,
Van Wyck Expressway, Jamaica, NY") .. "?directionsmode=transit")



보시듯이 openURL 안에 들어가는 것들을 함수로 간단하게 encoding 할 수 있습니다.



Maps App Installed or Not Installed?






URL scheme 에서 발생할 수 있는 문제는 디바이스에 구글앱이 깔려있지 않을 경우가 되겠죠? 깔려 있지 않으면 그 앱을 열 수가 없을 테니까요. 현재의 Corona Public Release(#971) 에서는 이럴 경우 화면과 같은 에러 메세지가 뜹니다. 아니면 그냥 silent fail 되던가요. 이건 바람직한 해결 방법이 아니죠.



Corona Daily Build #986부터 system.openURL() API를 call 했을 때 true/false를 리턴하기 때문에 이에 대해 대처할 수 있습니다.




 
local didOpenGoogleMaps =
system.openURL("comgooglemaps://?daddr=San+Francisco,+CA&saddr=cupertino")
if ( didOpenGoogleMaps == false ) then --defer to Apple Maps

system.openURL("http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino")
end

  

디바이스에 구글 맵이 깔려 있으면  didOpenGoogleMaps 변수(변수명은 여러분이 정하실 수 있습니다)가  true 가 될 것이고 깔려있지 않으면 false 가 될 겁니다. 이렇게 되면 target 앱이 깔려 있지 않을 경우 개발자는 특정 메세지나 특정 action 을 구현할 수 있게 되죠. 이 기능은 Daily Build #986 부터 사용 가능합니다. 유료 사용자일 경우 여기에서 다운 받으세요.


Ready to Begin?


여러분이 보셨듯이 코로나에서 구글 맵을 implementation 하는 것은 URL scheme 을 사용해서 아주 간단하게 처리하실 수 있습니다.  구글 맵이 제공하는 모든 기능을 살펴 보시려면 구글 맵 URL Scheme 웹사이트로 가셔서 보실 수 있습니다. 만약 애플 맵을 사용하시거나 구글 맵의 백업기능 지원으로 애플 맵 기능을 지원하시려면 이 문서를 참조하세요.



반응형


반응형

나는 꼼수다 마지막회를 정리하는 김어준 총수의 말입니다.


"노무현이 자기 목숨을 던져서 하나의 시대를 끝내는 것을 보면서 남은 세상은 어떻게든 해 보고 싶었습니다. 그래서 뒤돌아보지 않고 모든 걸 걸고 여기까지 왔습니다. 이번 대선이 시작되면서 저희가 약속했습니다. 공작은 우리가 상대한다. 약속은 지켰습니다. 이제 저희는 마이크를 내려 놓겠습니다. 고맙습니다. 쫄지마 끄읕~~~"


저에게는 너무 억울하고 답답하고 어디가서 뭔가 하소연 할 데도 못찾았는데...

이 MB 정권이 그동안 쌓아왔던 민주주의, 상식의 사회를 엉망으로 만들어 놓고 역사를 거꾸로 되돌리고 결국엔 노무현 전 대통령 마저 잃게 만든 이 말도 안되는 세상에서...


용기가 없어서 내 삶이 바쁘다는 핑계로 그냥 못본체 지나가려고 할 때 용기를 내서 제 소리를 내줬던 방송입니다.


그리고 저를 비겁하게 도망가지 않을 수 있도록 잡아 주었던 방송입니다.


그래서 많이 고맙고요..


그동안 이렇게 외국으로 나와서 살게 됐지만 계속 내 나라에 관심을 갖고 내가 할 수 있는 방법으로 참여할 수 있도록 크게 도움을 준 방송입니다.




국내 유일의 가카를 위한 헌정 방송이니 만큼 실제로 가카의 임기가 마무리 되는 대선때까지만 방송하기로 하고 시작했죠.

그리고 약속대로 대선을 하루 남겨놓고 마이크를 놓았습니다.


이제 우리가 투표에 참여해서 정권을 교체해야 합니다.

그래서 MB 를 제대로 심판 받게 하고 엉망이 된 이 나라를 바로 잡고...

새시대 새 정치로 희망을 만들 수 있도록 해야 합니다.



이제 20일 승리의 함성이 들릴 수 있도록 꼭 투표하고 주위 분들도 같이 투표에 참여할 수 있도록 합시다.. ^^

저도 어제 열심히 전화 카톡 때려서 5표 확보 했어요.. ^^



나꼼수 마지막회 마지막 부분에 흘렀던 음악은 1960년대 밥 딜런과 함께 미국의 저항가수, 인권운동 가수로 유명한 Joan Baez 의 Donna Donna 입니다.

도살장에 끌려가는 송아지에 대한 노래라는데요.
뭘 말하고 싶은 걸까요?



장터로 향하는 마차 위에
슬픈 눈망울의 어린 송아지 한 마리
그 위 높은 곳엔 제비 한 마리
날쎄게 하늘을 나네


바람들 웃는 것 좀 봐
배를 움켜쥐고 웃어대네
온종일 그리고 여름밤의 반이 다 가도록
웃고 또 웃어대네


도나 도나 도나 도나

도나 도나 도나 돈

도나 도나 도나 도나

도나 도나 도나 돈


'그만 투덜대.' 농부가 말했네
누가 너더러 송아지가 되래
누가 너더러 날개가 없으래
저리 당당히 자유로이 나는 제비처럼 말야


바람들 웃는 것 좀 봐
배를 움켜쥐고 웃어대네
온종일 그리고 여름밤의 반이 다 가도록
웃고 또 웃어대네


도나 도나 도나 도나

도나 도나 도나 돈

도나 도나 도나 도나

도나 도나 도나 돈

 
송아지들은 쉽사리 묶여 도살당하면서도
절대 그 이유를 알지 못하지
하지만 자유를 귀히 여기는 자라면
제비처럼 나는 법을 배우지


바람들 웃는 것 좀 봐
배를 움켜쥐고 웃어대네
온종일 그리고 여름밤의 반이 다 가도록
웃고 또 웃어대네


도나 도나 도나 도나

도나 도나 도나 돈

도나 도나 도나 도나

도나 도나 도나 돈


P.S. 나꼼수 만큼 재밌네요.

표창원 전 경찰대 교수의 토론 내용.

종편 최초로 8%가넘는 시청률을 기록했다네요.


반응형