개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
만약 여러분이 Corona Indie 나 Pro 의 등록자라면 daily builds 를 다운 받아서 사용하실 수 있으실 겁니다. 그리고 Build 947 에 new widgets 들이 포함된 내용도 전달 받으셨을 겁니다. 이 포함된 widget들은 아래 사항들을 포함하고 있습니다.
switch — in the form of a radio button, checkbox, or “on/off” slider.
segmented control — a “segmented button” in which each segment responds individually.
이 새 위젯들은 일반적인 특성을 따르고 있습니다. 각 위젯들은 새로운 widget library foundation 을 바탕으로 추가 돼 좀 더 flexible 하고 essentially 합니다.
Patience Please!
이 새 위젯들은 widget library 의 개선해 나가는 것들 중의 일부입니다. 더 많은 widget들이 다음주에 더 새로운 모습으로 소개 될 겁니다. 그 각각에 대해 cover 할 수 있도록 tutorial 을 작성해 드릴겁니다. 지난 widget들과 비교하면 거의 새로운 기반하에서 새롭게 작성되어야 할 정도로 많은 변화가 있었습니다. 여러분들은 아직까지 이전 위젯들을 사용하고 계실 건데요. 이전 위젯들에 대해서는 중요한 버그들에 대한 수정만 해 나갈 것이고 그 기능에 대한 개선이나 변경은 없을 겁니다. 이번주 다음주에 발표할 새로운 위젯들이 기존의 위젯들을 대신해 나가도록 진행할 계획입니다.
이 글은 native iOS visual theme 에 대해 설명드립니다. Android theme 은 다음번 daily build 에서 추가될 겁니다. 물론 굳이 이 주어진 visual theme만 사용할 수 있는 건 아닙니다. 여러분들 나람대로 스타일링해서 위젯들을 customizing 해서 사용하실 수 있습니다.
Getting Started…
새 위젯들을 경험하기 위해 우선 새로운 project 부터 만듭니다.
1. “require” the widget library
Just like with many Corona libraries, you’ll need to “require” the widget library to use widgets:
다른 많은 Corona library들과 같이 widget을 사용하기 위해서는 widget library 를 require 합니다.
localwidget=require("widget")
2. Copy theme file and assets
모든 widget들은 디폴트로 Lua file 이름에서 theme 정보를 가져옵니다. theme_ios.lua or (coming soon) theme_android.lua 가 그 파일 이름입니다. 이미지 파일들은 이 파일에서 정한 폴더에서 가져오게 됩니다. 위젯들은 custom theme file 을 세팅함으로서 스타일링할 수 있고 이미지 세트들도 생성할 수 있습니다. 이런 부분들은 약간 고급 기술 부분인데요. 나중에 이런 고급 기술 부분에 대해서 따로 다루도록 하겠습니다.
일단 default theme file과 asset folder를 여러분의 main project 디렉토리에 카피해 넣으세요. 이름은 theme_ios.lua and widget_ios가 될 겁니다. 이 파일들은 아래 경로로 가면 찾을 수 있습니다. 또는 이곳에서 다운로드 받으실 수도 있습니다.
CoronaSDK > SampleCode > Interface > WidgetDemo
3. Declare the theme using “setTheme()”
widget library 를 require 한 후 그 다음줄에 theme 을 정의해야 합니다.
아래 예제를 참조하세요. 처음부터 새로 만드실 필요는 없고 샘플로 드린 파일을
수정하셔서 사용하시면 편리하실 겁니다.
widget.setTheme("theme_ios")
NOTE: Do not append .lua to the reference passed to widget.setTheme().
Widget #1: Switch
첫번쨰로 선보일 새로운 widget 은 switch widget 입니다. 이 위젯은 세가지 종류가 있습니다. checkbox, radio button, or on/off slider
Event Listener
이 위젯에 유저가 어떤 행위를 했을 때 이를 감지할 basic listener function를 생성하셔야 합니다. 이 섹션에서 사용할 샘플 리스너를 한들어 보죠.
아래 예제를 여러분 파일에 복사해 넣으세요.
localfunctiononSwitchPress(event)
localswitch=event.target--event.target references the switch object
localresponse=switch.id.." is on: "..tostring(switch.isOn)
print(response)
switch.text:setText(tostring(switch.isOn))
end
switch의 현 상태는 .isOn parameter에 의해 참조됩니다. 여러분은 이 프로퍼티를 사용해서 현재의 switch 상태를 파악할 수 있습니다. true 이면 selected 나 on 인 상태이구요. false 이면 off 나 deselected 상태입니다.
보시다시피 실제 widget은 widget.newSwitch command를 사용해서 생성합니다. 그리고 디테일한 내용은 “options” table에 있습니다. 이 예제에서는 아래 프로퍼티들이 콤마로 구분돼 있습니다.
left and top (optional) — the left and top position of the switch. You can also position the switch normally by setting its x and y position afterward.
style — for this example, set it to checkbox.
id (optional) — this property allows you
to set a named reference for the widget. This is useful if you want to
use the same event listener function for several switches and identify a
specific one by its .id property within the listener function.
onPress (optional) — listener function called when the switch is touched.
Radio Button
radio button switch는 checkbox widget 이랑 거의 같은 방식으로 생성합니다. 다른 부분은 style parameter를 radio로 세팅하는 부분입니다. 위에 on-off 를 테스트하기 위해 만들었던 리스너 함수를 복사해서 여기서 사용하시면 됩니다.
on/off switch는 작은 “flick” switch 입니다. 일반 전등 스위치같은 역할을 하죠. 디폴트 switch widget 입니다. 셋업하는 부분은 switch widget 과 비슷한데요. 몇가지 key 가 다르죠. 기본 구조는 아래와 같습니다.
localonOffSwitch=widget.newSwitch
{
left=250,
top=230,
id="My on/off switch widget",
initialSwitchState=true,
onRelease=onSwitchPress
}
가장 많이 다른 부분은 event listener function 인데요. onPress parameter가 아닌 onRelease parameter 로 분류 됩니다. 이 경우 touch 가 released 되면 “release” event가 발생합니다.
Widget #2: Segmented Control
segmented control 은
multi-segment 버튼을 쉽게 만들 수 있도록 도와줍니다. 각 segment 별로 on/off 상태가 될 수 있고 그에 따라 관련된 값이 return 됩니다.
Event Listener
switch widget 처럼 segment control 에 대ㅐ 유저의 action 을 report 하기 위해 basic listener function을 생성해야 됩니다.
localfunctiononControlPress(event)
localtarget=event.target
print("Segment Label is:",target.segmentLabel)
print("Segment Number is:",target.segmentNumber)
end
이 segmented control 은 리스너에게 두가지 essential 값을 전달합니다. 유저가 touch 한 segment 의 segment label 과 segment number 가 그 값들입니다.
Basic Segmented Control
segmented control 은 아주 간단합니다. 아래 예제를 보세요
localsegmentedControl=widget.newSegmentedControl
{
left=65,
top=110,
segments={"s1","s2","s3","s4"},
segmentWidth=50,
defaultSegment=4,
onPress=onControlPress
}
left and top (optional) — the left and top position of the control. You can also position the control normally by setting its x and y position afterward.
segments — sub-table in which you define the
segments; it determines the total count and the label that appears on
each. Simply define them as comma-separated strings.
segmentWidth (optional) — the pixel width of each segment. Default is 50 pixels.
defaultSegment (optional) — this property
allows you to set the segment that is “on” when the control is rendered.
Specify a number between 1 and the total number of segments. If you
don’t specify this property, it defaults to the first segment.
onPress (optional) — listener function called when the control is touched.
More to Come!
다른 훌륭한 widgets들이 이어서 선보입니다. 다음주 daily builds 가 릴리즈 될 때 선보일 예정인데요. 다음주 화요일의 Tutorial 을 통해서 그 위젯들에 대한 설명을 드리겠습니다. 그 동안 최신 daily build를 다운 받으시고 위 3개 widget들에 대해 익혀 두세요. daily builds 는 유료 등록하신 분들만 다운받으실 수 있습니다. 코로나의 최신 기술을 그 때 그 때 사용하고 싶으신 분은 지금 유료등록을 해 주세요.