멀티 스레드로 윈도우 열기

웹브라우저에서 동작하는 자바스크립트는 싱글 스레드로 동작한다. 
즉,  어떤 코드를 실행하던간에 순차적으로 실행되고, 이 순서에 따라 의존성도 생긴다.

하지만 타이타늄 모바일의 경우 두가지 방법으로 윈도우를 열수있다.

1. 싱글 스레드로 윈도우 열기 

[app.js]

var parentWin = Ti.UI.createWindow();
var button = Ti.UI.createButton();
button.addEventListener(“click”, function(e){
var childWin = Ti.UI.createWindow();
childWin.open();
});
parentWin.add(button);
parentWin.open();

위와 같이 같은 파일 안에서 윈도우를 정의할 경우 같은 스레드에서 윈도우가 열린다.

2. 멀티 스레드로 윈도우 열기 

멀티 스레드로 윈도우를 열려면, 다음과 같이 윈도우 생성시 URL 속성을 지정한다.

[app.js]

var parentWin = Ti.UI.createWindow();
var button = Ti.UI.createButton();
button.addEventListener(“click”, function(e){
var childWin = Ti.UI.createWindow({ url: “./childWindow.js” });
childWin.open();

Ti.App.fireEvent(“fooEvent”, {data:”message”});
});
parentWin.add(button);
parentWin.open();

[childWindow.js]

var win = Ti.UI.currentWindow;

Ti.App.addEventListener(“fooEvent”, function(e){
Ti.API.info(e.data + ” got it!”);
});

위와 같이 url로 지정하면 childWindow.js 파일 안에 정의된 내용은 다른 스레드로 동작한다.
따라서, 두 윈도우 사이에 데이터를 전송하려면 약간의 시차가 생길수 있다.

예를 들어, 자식 윈도우를 열고
1. childWindow.open()

바로 윈도우로 메시지를 날리면,
2.  Ti.App.fireEvent(“fooEvent”, {data:”message”});

자식 윈도우에서 메시지를 받아야하는데 받지 못한다.
3.  Ti.App.addEventListener(“fooEvent”, function(e){  Ti.API.info(e.data + ” got it!”);  });

따라서 URL을 이용해 윈도우를 열 경우엔, 스레드 생성시간만큼의 약간의 딜레이를 주어야한다.

var childWin = Ti.UI.createWindow({ url: “./childWindow.js” });

childWin.open();
setTimeout(function(){

      Ti.App.fireEvent(“fooEvent”, {data:”message”});

   }, 100); 

});

타이타늄 모바일로 딤드(dimmed) 레이어(window) 만들기

딤드 레이어를 만들때 실수하기 가장 쉬운 부분
1. 부모 윈도우를 반투명하게 만들고,
2. 그 윈도우 위에 뷰를 하나 올리면 되지않을까 하는 생각이다.

코드로 만들어보면 대충 다음과 같다.

var win = Ti.UI.createWindow({
backgroundColor: “gray”,
opacity: 0.5
});

var view = Ti.UI.createView({
width: 200,
height: 200,
top: 50,
left: (Ti.Platform.displayCaps.platformWidth – 200)/2,
opacity:1
});
win.add(view);
win.open();

하지만 위 코드는 부모의 투명도를 자식들이 그대로 물려받기 때문에 기대했던대로 동작하지 않는다.
즉, 배경만 투명하게 만들고 싶은데, 실제 컨텐츠 뷰도 반투명하게 되어 버린다.
opacity:1 로 지정해도 마찬가지다.

그럼, 어떻게 해야할까? 여기에 꼼수가 있다.
바로 윈도우를 2개 띄우면 된다.
사실 웹에서 딤드레이어를 구현할때도 아래와 같이 Div태그를 중첩하지 않고, 병렬로 2개를 이용해 만든다.

웹에서 구현하는 방식

<body>
<div class=”lay_content”>중심 레이어</div>
<div class=”dimmed”></div>
</body>

위와 같은 방법으로 코드를 다시 작성해보면 다음과 같다.

var winBG = Ti.UI.createWindow({
backgroundColor : ‘#000’,
opacity : 0.60
});

var win = Ti.UI.createWindow({
width : 304,
height : 284,
top : 44,
left : 8,
borderRadius : 10
});
winBG.open();
win.open();

페이스 찾기

4개월여만에 내 어깨를 짖누르던 부담감을 하나 덜었다.
이제 곧 출판되겠지? 2번째 번역서..
이번 번역서는 페이지 수만큼이나 2배는 더 힘들었다.
회사일도 바빠져서 거의 주말 작업에 의존하다보니 속도는 더디고,..
매일매일 이어지는 야근에 주말엔 잠자기 바쁘고..
여튼 그래도 꾸역꾸역 결국 해냈꾸나.. 박수 짝짝짝~~

어제 오늘 삼청동 나들이를 다녀왔다.
요즘 회사밖에서 하는 일들은 거의 전부 오랜만이라는 수식어가 붙는다.
날씨가 어찌나 좋은지.. 나들이 하기 딱 좋은 날씨다.
한달만 지나면 낮에는 숨쉬기 힘들정도로 더울꺼 같다.
앞으로 한달 또 알차게 나들이 준비를 해야겠다.
인연이 있다면 마주치겠지? 라는 생각을 오래전부터 막연히 했는데…
오늘 누군가를 딱 마주쳤다. 어찌나 반갑던지.. 여튼..

피곤해서 일찍 집에 왔는데, 프리즈비를 너무 날리고 싶었다.
해가 느엿느엿 지니까.. 바람도 선선히 불고,
그래서 프리즈비 천재! 엄마를 꼬시기로 작정하고,.
집에 왔는데.. 엄마가 없다… 그래서 대신 아빠를 꼬시기로…
그런데 안 넘어온다… 젠장.. 날씨 너무 좋은데..
그래서 배드민턴을 치기로 했는데.. 집에 배드민턴 채가 없다..-_-;;;

다시 아빠랑 마트가서 쇼핑하고 집에오니.. 해는 다 지고…
으짤수없이 야간 배틀!!
이게 얼마만인가? 10년만인가?.. 그런거같다…
10년만에 아빠와 배드민턴을 쳤다..
뭐 이번엔 내기를 하지 않았으니.. 승부는 당연히 없고..
간만에 아빠랑 뛰니까.. 기분이 좋네…

아사이 생~맥주도 괜츈한거 같다.
2캔 먹었더니.. 졸리다.. 샤워하고 자야겠다.
오랜만에 정상 궤도에 올라선듯한 기분이든다.
그래 이렇게 살아야지.. 그동안은 너무 바빴어! 생각하기도 싫다!