2012/12/13 15:10

iPhone5의 스크린 크기와 iPhone4, iPhone5 호환하여 코딩하기 -- iOS (iPhone)



iPhone4에서 컨트롤을 전체로 지정하기 위해 320 * 480으로 지정한다.

[mWebView setFrame:CGRectMake(0, 0, 320, 480)];

그런데, 이런 코딩은 iPhone5에서는 아래가 잘려서 나오게 된다.
이유는 iPhone5가 320 * 568의 해상도를 가지고 있기 때문이다.

그래서 필자는 컨트롤의 크기를 지정하는 코딩을 특히 전체로 보여져야 하는 부분의 코딩을 아래와 같이 수정하였다.


#define PHONE_SCREEN_HEIGHT   CGRectGetHeight([UIScreen mainScreen].applicationFrame)
#define PHONE_SCREEN_WIDTH    CGRectGetWidth([UIScreen mainScreen].applicationFrame)

[mWebView setFrame:CGRectMake(0, 0, PHONE_SCREEN_WIDTH, PHONE_SCREEN_HEIGHT)];


추가) 2012.12.20

iPhone5에서 TableView의 하단 (yPosition 480을 넘기는 Cell)이 안눌리는 현상이 있었는데 아래와 같이 해결하였다.
원인은 View의 크기 등을 위의 방법으로 늘려도 전체의 bounds가 늘어나지 않으면 응답을 못받는 것이었으며, 아래의 해결책들이 바로 이 문제를 다룬 것이다.


방법1) xib파일의 Attributes Inspector에서 Window section 중 Full Screen At Launch를 체크

방법2) xib파일에서 필자처럼 Window section이 없는 경우, Attributes Inspector에서 Simulated Metrics section 중 Size를 Retina 4 Full Screen으로 변경할 것.

보통 iPhone4에서 개발 시 위의 Size를 None이나 Freeform으로 지정했는데 이것이 문제였다.
iPhone5는 물론 아래 버전에서도 적절한 크기로 잘 작동한다.

방법3) xib파일을 사용하지 않는 경우, viewDidLoad()에 아래를 추가한다.

self.view.frame =
[UIScreen mainScreen].bounds];


추가) 2012.12.21

iPhone4, iPhone5 Simulator

XCode 4.5에서 시뮬레이터로 실행하면 보통 iPhone 6.0 Simulator로 해서 Old iPhone의 시뮬레이터가 동작한다.
iPhone5에 맞추기 위해서는 

iOS Simulator 메뉴 > Hardware > Device >
iPad
iPad (Retina)
iPhone    iPhone older
iPhone (Retina 3.5-inch) iPhone 4.x
iPhone (Retina 4-inch) iPhone 5.x

로 선택해 사용이 가능하다.

처음에 당황스러웠는데, 시뮬레이터에 Home버튼이 없을 경우, 

Home키 : Shift + Command + H

를 이용하여 Home키 누르기와 두 번 실행하여 강제종료를 위한 더블클릭이 가능하다.


추가) 2013.01.04

iPhone5s가 곧 나올 것 같은데 이 버전은 iPhone5에서 가로로 좀 더 커져서 나올 예정이라고 한다.
Posted by 엔귤
2012. 9. 19. 08:51

회사달력의 공휴일만 가져오는 함수.

 

DATA: IT_HOLI LIKE ISCAL_DAY OCCURS 0 WITH HEADER LINE.

 

LV_ALTIME = DATE_TO – DATE_FROM.

CALL FUNCTION 'HOLIDAY_GET'

        EXPORTING

             HOLIDAY_CALENDAR           = 'E3'    “회사달력지정

             FACTORY_CALENDAR           = 'E3'    회사달력지정

             DATE_FROM                  = DATE_FROM  “FROM DATE

             DATE_TO                    = DATE_TO    “TO DATE

*    IMPORTING

*         YEAR_OF_VALID_FROM         =

*         YEAR_OF_VALID_TO           =

*         RETURNCODE                 =

         TABLES

              HOLIDAYS                   = IT_HOLI.  “공휴일만 저장된 ITAB.

*    EXCEPTIONS

*         FACTORY_CALENDAR_NOT_FOUND = 1

*         HOLIDAY_CALENDAR_NOT_FOUND = 2

*         DATE_HAS_INVALID_FORMAT    = 3

*         DATE_INCONSISTENCY         = 4

*         OTHERS                     = 5

 

    IF SY-SUBRC <> 0.

*     MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ELSE.

      DESCRIBE TABLE IT_HOLI LINES LINE.      “LINE = 공휴일수

      IF LINE <> 0.

        LV_ALTIME = LV_ALTIME - LINE.     “휴무일을 뺀 순수 작업일수

      ENDIF.

    ENDIF.

 

FROM DATE = TO DATE 인 경우 해당일자가 휴무일인지를 체크 할 수 있다.

  

특정일자의 달(月)의 마지막 일자를 가져오는 함수.

 

DATA LAST_DATE LIKE SY-DATUM.

 

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'

  EXPORTING

    DAY_IN                  = SY-DATUM       “기준이 되는 임의의 일자

IMPORTING

LAST_DAY_OF_MONTH       = LAST_DATE      “해당월의 마지막 일자

* EXCEPTIONS

*   DAY_IN_NO_DATE          = 1

*   OTHERS                  = 2

          .

IF SY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 
변수값 ALPHA CONVERSION 함수.

 

DATA: GV_MATNR(18),

TMP_MATNR LIKE MARA-MATNR.

 

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

       EXPORTING

            INPUT  = TMP_MATNR        “ALPHA CONVERSION이 된 변수값

       IMPORTING

            OUTPUT = GV_MATNR.      “ALPHA CONVERSION이 안된 변수값

 

AND

 

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

       EXPORTING

            INPUT  = GV_MATNR        “ALPHA CONVERSION이 안된 변수값

       IMPORTING

            OUTPUT = TMP_MATNR.      “ALPHA CONVERSION이 된 변수값

 

OR

 

CALL FUNCTION 'FI_ALPHA_CONVERT'

       EXPORTING

         I_STRING       = GV_MATNR

       IMPORTING

         E_STRING       = TMP_MATNR.

 

 

GV_MATNR = ‘100060001’.

TMP_MATNR = ‘000000000100060001’.

 

  

INTERNAL TABLE을 TEXT FILE로 내리는 함수.

 

DATA ERFILE  LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\SPEC.TXT'.

 

CALL FUNCTION 'WS_DOWNLOAD'

       EXPORTING

            FILENAME = ERFILE       “PC로 내려오는 파일 이름

            FILETYPE = 'DAT'        “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.        “텍스트로 내릴 ITAB.

 

OR

 

CALL FUNCTION 'DOWNLOAD'

       EXPORTING

            FILENAME = ERFILE       “PC로 내려오는 파일 이름

            FILETYPE = 'DAT'        “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.        “텍스트로 내릴 ITAB.

 

 

PC에 있는 텍스트 파일을 INTERNAL TABLE로 가져오는 함수

 

DATA: ED_FNAME LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\OUT.TXT',

      ED_FTYPE LIKE RLGRAP-FILETYPE VALUE 'DAT'.

 

CALL FUNCTION 'WS_UPLOAD'

       EXPORTING

            FILENAME = ED_FNAME

            FILETYPE = ED_FTYPE    “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.     “텍스트파일의 내용을 가져오는 INTERNAL TABLE

 

OR

 

CALL FUNCTION 'UPLOAD'

       EXPORTING

            FILENAME = ED_FNAME

            FILETYPE = ED_FTYPE    “DAT, DBF, ASC, BIN

       TABLES

            DATA_TAB = ITAB.     “텍스트파일의 내용을 가져오는 INTERNAL TABLE

 

 

 

응용 프로그램 실행하는 함수.

 

CALL FUNCTION 'WS_EXECUTE'

       EXPORTING

            PROGRAM = 'C:\SAPPROD\PRT3000.EXE'.     “실행할 응용 프로그램

 

  

특정일자의 해당월의 마지막 일을 가져오는 함수

 

DATA TMP_LASTDAY(2).

 

CALL FUNCTION 'END_OF_MONTH_DETERMINE'

    EXPORTING

      DATUM = SY-DATUM         “기준이 되는 일자

    IMPORTING

      TT = TMP_LASTDAY         “해당월의 마지막 일(28,29,30,31)

    EXCEPTIONS

      OTHERS = 1.

 

  

PC에 있는 파일을 선택할 수 있는 파일선택 창 띄우는 함수

 

DATA: FILENAME(128).

 

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

  EXPORTING

    PROGRAM_NAME        = SYST-REPID

    DYNPRO_NUMBER       = SYST-DYNNR

*   FIELD_NAME          = ' '

*   STATIC              = ' '

*   MASK                = ' '

  CHANGING

    FILE_NAME           = FILENAME      “경로와 파일명이 들어가는 변수

* EXCEPTIONS

*   MASK_TOO_LONG       = 1

*   OTHERS              = 2

          .

IF SY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 

  

하단의 상태바에 특정문자열을 표시해 주는 함수

 

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

       EXPORTING

            PERCENTAGE = SY-INDEX

            TEXT       = '데이터를 가져오는 중입니다…'.

 

LOOP문과 함께 사용하면 진행현황을 % 로 표시할 수 있다.

 

  

SAP 오피스의 메일박스에 메일 전송하는 함수

 

DATA : BEGIN OF MS_MAILOBJECT_CONT OCCURS 0.

          INCLUDE STRUCTURE MCMAILOBJ.

DATA : END OF MS_MAILOBJECT_CONT.

 

CLEAR : MS_MAILOBJECT_CONT.

REFRESH : MS_MAILOBJECT_CONT.

 

CONCATENATE '플랜트' WERKS ' 자재코드 ' MATNR

         ' 원가 생성작업을 해 주세요.'

         INTO MS_MAILOBJECT_CONT-OBJLINE.

 

  MOVE : '1' TO MS_MAILOBJECT_CONT-OBJNR,

         '1' TO MS_MAILOBJECT_CONT-OBJLEVEL,

         'RAW' TO MS_MAILOBJECT_CONT-OBJTYPE,

         '원가생성 요청' TO MS_MAILOBJECT_CONT-OBJNAM,

         '원가생성 요청' TO MS_MAILOBJECT_CONT-OBJDES.

  APPEND MS_MAILOBJECT_CONT.

 

  CALL FUNCTION 'MC_SEND_MAIL'

    EXPORTING

      MS_MAIL_SENDMODE         = 'B'

      MS_MAIL_TITLE            = '원가생성요청'

      MS_MAIL_DESCRIPTION      = '원가생성작업을 해주세요'

      MS_MAIL_RECEIVER         = 'ED03'

      MS_MAIL_EXPRESS          = ''      “ X=고속(받는사람의 작업화면에 창이 뜸)

TABLES

      MS_MAIL_CONT              = MS_MAILOBJECT_CONT

.

  IF SY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

  

 

하나의 입력값을 받는 POPUP창 띄우는 함수

 

DATA ANSWER(1).

DATA VALUE1 LIKE SPOP-VARVALUE1.

 

CALL FUNCTION 'POPUP_TO_GET_ONE_VALUE'

    EXPORTING

      TEXTLINE1            = '서천 외주단가를 입력하세요.'

      TEXTLINE2            = '단가 입력후 계속을 클릭하면 입력.'

      TEXTLINE3            = '취소를 클릭하면 단가입력 취소.'

      TITEL                = '외주단가 입력'

      VALUELENGTH          = 10       “입력받을 길이

   IMPORTING

     ANSWER               = ANSWER     “선택버튼 종류

     VALUE1               = VALUE1.    “입력된 값

*  EXCEPTIONS

*    TITEL_TOO_LONG       = 1

*    OTHERS               = 2

   

사원번호를 가지고 해당 사원명 가져오는 함수

CALL FUNCTION 'RP_CHECK_PERNR'
       EXPORTING
            BEG    = SY-DATUM              
"오늘날짜
            PNR    = GV_PERNR              "사원번호
       IMPORTING
            NAME   = GV_NAME              
"사원명
       EXCEPTIONS
            OTHERS = 1.

문자열에서 특정문자(열) 변경 및 삭제

 

DATA: T_TEXT(30) VALUE '031-370-9164',

 

CALL FUNCTION 'STRING_REPLACE'
       EXPORTING
            PATTERN             = '-'  
" 변경할 문자열
            SUBSTITUTE          = ''    
" 변경될 문자열
*         MAX_REPLACES        = 0
*    importing
*         number_of_replaces  = numberofreplaces
       CHANGING
            TEXT                = T_TEXT    
" 문자열이 들어있는 문장
       EXCEPTIONS
            WRONG_STRING_LENGTH = 1
            OTHERS              = 2.

 

T_TEXT : ‘0313709164’

 

  

소수점이 있는 문자열을 DECIMAL TYPE으로 변환하는 함수

 

DATA: GV_TEXT(10),

GV_DECIMAL(10) TYPE P DECIMALS 3.

 

CALL FUNCTION 'CHAR_FLTP_CONVERSION'

EXPORTING

 STRING     = GV_TEXT        "CHAR 변수

        IMPORTING

          FLSTR     = GV_DECIMAL .    "DEC 변수

 

GV_TEXT : ‘2345.678’

GV_DECIMAL : 2345.678

 

  

두 일자사이의 개월 수를 계산하는 함수

 

CALL FUNCTION 'RH_PM_CONVERT_DATE_TO_MONTH'

  EXPORTING

    BEGDA               =  GV_BEGDA      “시작일자

    ENDDA               =  GV_ENDDA      “종료일자

IMPORTING

    MONTHS              =  ACT_MONTHS    개월수

* EXCEPTIONS

*   INVALID_BEGDA       = 1

*   OTHERS              = 2

          .

IF SY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 

  

그래픽 구현

 

DATA: BEGIN OF ITAB_DATA OCCURS 0,

           DATANAME(15),

           QUANTITY1 TYPE I,

           QUANTITY2 TYPE I,

           QUANTITY3 TYPE I,

      END OF ITAB_DATA,

      BEGIN OF ITAB_OPTIONS OCCURS 0,

           OPTION(20),

      END OF ITAB_OPTIONS.

 

ITAB_DATA-DATANAME = '국내석건'.

ITAB_DATA-QUANTITY1 = 55.

ITAB_DATA-QUANTITY2 = 62.

ITAB_DATA-QUANTITY3 = 59.

APPEND ITAB_DATA.

ITAB_DATA-DATANAME = '산공생산'.

ITAB_DATA-QUANTITY1 = 35.

ITAB_DATA-QUANTITY2 = 52.

ITAB_DATA-QUANTITY3 = 44.

APPEND ITAB_DATA.

ITAB_DATA-DATANAME = '수출생산'.

ITAB_DATA-QUANTITY1 = 68.

ITAB_DATA-QUANTITY2 = 52.

ITAB_DATA-QUANTITY3 = 79.

APPEND ITAB_DATA.

 

CALL FUNCTION 'GRAPH_MATRIX_3D'

     EXPORTING

          COL1        = '1'

          COL2        = '2'

          COL3        = '3'

          TITL        = '매출금액'

     TABLES

          DATA        = ITAB_DATA

          OPTS        = ITAB_OPTIONS

     EXCEPTIONS

          OTHERS      = 1.

 

뒤에 붙은 ‘-‘부호를 앞으로 빼주는 함수

 

DATA GV_VALUE(5).

GV_VALUE = '1234-'.

 

CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'

  CHANGING

    VALUE         = GV_VALUE.

 

GV_VALUE “ ‘-1234’

 

  

POPUP 관련 함수들

 

POPUP_TO_CONFIRM_LOSS_OF_DATA - user가 delete명령같은 것을 실행할 때 dialog box생성한다.

POPUP_TO_CONFIRM_STEP
- user가 다음 단계로 실행을 원할 때 dialog box 를 생성한다.

POPUP_TO_CONFIRM_WITH_MESSAGE
- user가 수행중 어떤 특정한 결정을 내리는 부분에 있을 때,
                               정보제공 dialog box를 생성한다.


POPUP_TO_CONFIRM_WITH_VALUE
- user가 특정한 object로 작업을 수행하기를 원할 때
                             question box를 생성한다.


POPUP_TO_DECIDE
- user에게 radio button을 제공하여 결정하게 한다.

POPUP_TO_DECIDE_WITH_MESSAGE
-  user에게 분류된 text를 제공함으로써 결정하게 하는
                               dialog box를 생성한다.


POPUP_TO_DISPLAY_TEXT
- 두 줄로 된 dialog box를 생성한다.

POPUP_TO_SELECT_MONTH
- 달을 선택하게 한다.

POPUP_WITH_TABLE_DISPLAY
- 유저에게 선택한 table을 table line값과 함께
                          보여준다.

 

POPUP_TO_FILL_COMMAND_LINE – 입력값을 받을 수 있는 입력 필드가 생긴다.

 

 

  

문자열 자를 때 자르는 위치에 2BYTE문자가 있는지를 체크하는 함수

 

DATA: LV_LENGTH TYPE I.

 

CALL FUNCTION 'TRUNCATE_MULTIPLE_BYTE_STRING'

  EXPORTING

    STRING              = 'ABDC가1234'

    TARGET_LENGTH       = '5'

  IMPORTING

    USE_LENGTH          = LV_LENGTH

          .

LV_LENGTH 와 TARGET_LENGTH 에서 입력한 값이 일치하면 문제가 없고,

1이 작은 경우 2BYTE 문자가 걸림.

자르는 위치를 LV_LENGTH로 하면 문자가 깨지는 문제가 발생하지 않음.

 

OR

DATA: LV_O_STR(10).

 

CALL FUNCTION 'CUT_2BYTES_STRINGS'

  EXPORTING

    I_STR         = 'AB가나1234'

    I_LEN         = '5'

  IMPORTING

    O_STR         = LV_O_STR

          .

LV_O_STR : ‘AB가’

 

 

반올림, 올림, 버림을 쉽게 할 수 있는 함수

 

DATA: INPUT TYPE F,

      OUTPUT TYPE F,

      OUTPUT_N(5) TYPE N.

 

INPUT = '1276.65'.

 

CALL FUNCTION 'FIMA_NUMERICAL_VALUE_ROUND'

   EXPORTING

        I_RTYPE = ' '  "반올림

*        I_RTYPE = '+'  "올림

*        I_RTYPE = '-'  "버림

        I_RUNIT = '1'   “기준자리 수

        I_VALUE = INPUT

   IMPORTING

        E_VALUE_RND = OUTPUT.

 

OUTPUT_N = OUTPUT.

 

OUTPUT_N : ‘01277’

 

  

문자열에 있는 값이 숫자만으로 되어있는지 문자가 포함됐는지 체크하는 함수

 

DATA: STRING_1(20) TYPE C, STRING_1_TYPE(4) TYPE C,

      STRING_2(20) TYPE C, STRING_2_TYPE(4) TYPE C,

      STRING_3(20) TYPE C, STRING_3_TYPE(4) TYPE C.

 

STRING_1 = '12345678901234567890'.

STRING_2 = 'abcdefg우리나라만세z'.

STRING_3 = 'abcdAAA34557azzidfll'.

 

CALL FUNCTION 'NUMERIC_CHECK'

     EXPORTING

          STRING_IN = STRING_1

     IMPORTING

          HTYPE     = STRING_1_TYPE.

 

CALL FUNCTION 'NUMERIC_CHECK'

     EXPORTING

          STRING_IN = STRING_2

     IMPORTING

          HTYPE     = STRING_2_TYPE.

 

CALL FUNCTION 'NUMERIC_CHECK'

     EXPORTING

          STRING_IN = STRING_3

     IMPORTING

          HTYPE     = STRING_3_TYPE.

 

STRING_1_TYPE : NUMC

STRING_2_TYPE : CHAR

STRING_3_TYPE : CHAR

 

  

클립보드에 들어있는 내용을 가져오는 함수

 

DATA: BEGIN OF TAB OCCURS 1,

          TEXT(20) TYPE C,

      END OF TAB.

DATA  EMPTY(1).

 

CLEAR EMPTY.

REFRESH TAB.

FREE TAB.

 

CALL FUNCTION 'CLPB_IMPORT'

       IMPORTING

            EMPTY      = EMPTY

       TABLES

            DATA_TAB   = TAB

       EXCEPTIONS

            CLPB_ERROR = 01.

 

  

  

문자열로된 계산식의 계산값을 RETURN 하는 함수

 

DATA: AAA TYPE P.

 

CALL FUNCTION 'EVAL_FORMULA'

  EXPORTING

    FORMULA        = '(10+10)*10/10-7*(5+3)/7'

 IMPORTING

  VALUE          = AAA

          .

 

WRITE AAA.  => 12

Posted by 엔귤



This is a simple tutorial  to create "slide to unlock" feature.  As you may have guessed, we have to use UISlider. UISlider is an awesome object for many purposes - adjusting parameters of an object, or values of anything (size, amount, etc). But this time we will use it as a "Unlock Key". This type of control is useful when you have an app doing something and the user then puts the iPhone in his pocket while the app is still running. If we just use a normal UIButton to unlock, the user could accidentally touched it while the phone is in the pocket, and unlocked the screen of the app, accidentally. This is the same application as the normal iPhone lock feature.

DOWNLOAD THE SAMPLE CODE HERE

Ok, all we need in the project is a UISlider, a UIImageView and a UILabel. In .h, we declared them as follows:

IBOutlet UISlider *slideToUnlock;
IBOutlet UIButton *lockButton;
IBOutlet UILabel *myLabel;
IBOutlet UIImageView *Container;

The lockButton is just a control to enable you to enter the "Locked" status. Also we will be needing 3 methods to help us implementing the "Slide to Unlock" feature in our app.

-(IBAction)UnLockIt;
-(IBAction)LockIt;
-(IBAction)fadeLabel;

So, how do we go about implementing it. We need to think of the behaviour, of course. We want the user to slide the slider ball until the very end (right hand side), only then the screen be unlocked. Also, if the user slides half way or not until the very end, and let go (untouch) of the slider ball, we need to slide back the slider ball into initial position (value = 0, at the most left side). 

Translating that behaviour into code means: Since the behaviour depends on untouch action, therefore we will use the "Touch Up Inside" delegate of the UISlider. So we will connect the "Touch Up Inside" method to the UnLockIt method.

Let's take a look inside the UnLockIt method - we need to check the value of slider (which equals to the location of the slider ball), and translate the behaviour we stated above into codes:

-(IBAction)UnLockIt {

if (!UNLOCKED) {

if (slideToUnlock.value ==1.0) { // if user slide to the most right side, stop the operation 
// Put here what happens when it is unlocked

slideToUnlock.hidden = YES;
lockButton.hidden = NO;
Container.hidden = YES;
myLabel.hidden = YES;
UNLOCKED = YES;
} else { 
// user did not slide far enough, so return back to 0 position

[UIView beginAnimations: @"SlideCanceled" context: nil];
[UIView setAnimationDelegate: self];
[UIView setAnimationDuration: 0.35];
// use CurveEaseOut to create "spring" effect
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut]; 
slideToUnlock.value = 0.0;

[UIView commitAnimations];

}

}

You notice that we also declare a global variable of type BOOL to check the state of the lock. If the slider ball is at the most right, the value is 1.0 (this is the default max value of a UISlider, you can change in IB if you want), then execute the method to unlock it, in this example, just to hide the slider, label and so on and display the Lock button. If it is not reaching to the right side, then we use CoreAnimation to animate the auto sliding of the slider ball back to initial position of 0.0 (which is at the most left hand side).

Note that I use the UIViewAnimationCurveEaseOut, this animation curve starts out very fast immediately and then slows down at the end. This is to make it similar to a spring reaction.

You also notice we added a label in there. Now, if you see the label in your iPhone, it fades out as you slide the slider towards the right side, we can accomplish this by tying the "Value Changed" delegate of the UISlider to the method fadeLabel as below:

-(IBAction)fadeLabel {

myLabel.alpha = 1.0 - slideToUnlock.value;

}

This is simple really. Whenever we move the slider ball from left to right, the value of the slider (that we named slideToUnlock), will increase from 0 to 1.0. But we want to change the label's alpha (opacity) from 1.0 to 0.0, therefore a simple invert is done by taking the max value of slideToUnlock and subtracting it to its current value. A better code would be to use

myLabel.alpha = slideToUnlock.maximumValue - slideToUnlock.value;

especially if you changed the maximum value to other than 1.0.

That's done with the behaviour of the slider. Now, what's left is just to customize the UISlider with custom slider ball. I also put a UIImageView (Container) at the back to align it nicely with the slider ball. You could also use the container image as the Slider's minimum and maximum track images. 

NOTE: Just a little note, the customizing of UISlider must be done at viewDidLoad, otherwise the slider won't be made custom for some reason.

So under viewDidLoad (or if you wish you can put it under applicationDidFinishLaunching), we put the customization code of the UISlider:

// I set the track images to be nothing (just a clear image)
UIImage *stetchLeftTrack= [[UIImage imageNamed:@"Nothing.png"]
stretchableImageWithLeftCapWidth:30.0 topCapHeight:0.0];
UIImage *stetchRightTrack= [[UIImage imageNamed:@"Nothing.png"]
stretchableImageWithLeftCapWidth:30.0 topCapHeight:0.0];

// this code to set the slider ball image
[slideToUnlock setThumbImage: [UIImage imageNamed:@"SlideToStop.png"] forState:UIControlStateNormal];
[slideToUnlock setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal];
[slideToUnlock setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal];

That's about it. Enjoy.

'I-Phone' 카테고리의 다른 글

[IOS] 잡지식모음  (0) 2011.02.18
[IOS] 유용한자료  (0) 2011.02.09
[IOS]UILabel 동적사이즈  (0) 2010.12.05
[IOS]오픈소스  (0) 2010.11.29
[I-Phone] 주소록 Label읽어오기  (0) 2010.11.26
Posted by 엔귤