2010년 9월 14일 화요일

UISegmentedControl을 enum과 사용하기

UISegmentedControl 을 enum과 연결해서 가독성 좋은 코드 만들기






typedef enum {

    kFirst = 0,

    kSecond,

    kThird,

} TabIndex;


enum을 선언하고 아래와 같이 쓰면 가독성이 좋은 코드가 된다.


- (IBAction)changeSegmented:(id)sender {

    UISegmentedControl *control = sender;

    NSInteger index = [control selectedSegmentIndex];

    

    switch (index) {

        case kFirst: //0

    ...

            break;

        case kSecond: //1

            ...

            break;

        case kThird: //2

    ...

            break;

        default:

            break;

    }

}



2010년 8월 7일 토요일

Objective-C Outlet

objective-c 에서는 다른 객체를 참조 하는 변수를 outlet 이라고 부른다. 
outlet 은 GUI 구성을 하는 Interface Builder 에서 변수로 다른 객체를 연결 할때 사용함. 

IBOutlet UIView *view2;


위와 같은 형태로 주로 사용되는데 
IBOutlet 에서 IB는 Interface Builder의 줄인말인듯. 

참조를 하기 위해서는 아래와 같이 선언하고 .m 에서 접근 하면 된다. 

@property (nonatomic, retain) IBOutlet UIView *view2;

2010년 6월 29일 화요일

UIView Flip 효과 - iPhone

  


#pragma mark - Flip screen


- (void)flipAction:(id)sender

{

[UIView setAnimationDelegate:self];

[UIView setAnimationDidStopSelector:@selector

            (animationDidStop:animationIDfinished:finished:context:)];

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.75];

[UIView setAnimationTransition:([self.tableView superview] ? UIViewAnimationTransitionFlipFromLeft UIViewAnimationTransitionFlipFromRight)

forView:self.tableView cache:YES];

if ([instructionsView superview])

[instructionsView removeFromSuperview];

else

[self.tableView addSubview:instructionsView];


[UIView commitAnimations];

// adjust our done/info buttons accordingly

if ([instructionsView superview] == self.tableView)

self.navigationItem.rightBarButtonItem = doneButton;

else

self.navigationItem.rightBarButtonItem = flipButton;

}

2010년 6월 27일 일요일

Protocols - Objective-C

Protocol : 메소드 선언의 집합

java의 interface라는 개념이 Protocol을 도입한 개념임. 

서로 다른 객체가 같은 메소드의 집합을 가지는 경우, 상속 관계는 아님. 

프로토콜은 메소드의 명칭들을 정해 놓으면 그 프로토콜을 따를 때 메소드의 명칭들이 같아지므로 사용성이 좋아지는 것을 목적으로 한다. 



2010년 3월 12일 금요일

충돌 알고리즘

1) Fast 3D Triangle-Box Overlap Testing (삼각형과 박스의 충돌 검사)
    홈페이지 주소 : http://www.acm.org/jgt/papers/AkenineMoller01/ 이런연결 끊어졌네요..ㅡㅡ;

2) A Fast Triangle-Triangle Intersection Test (삼각형대 삼각형 충돌검사)
   홈페이지 주소 : http://www.acm.org/jgt/papers/Moller97/ 끊어짐.

3) Fast, Minimum Storage Ray-Triangle Intersection (직선과 삼각형의 충돌검사)
   홈페이지 주소 : http://www.acm.org/jgt/papers/MollerTrumbore97/ 끊어짐.


Collision Detection

http://code.google.com/p/gjkd/
http://code.google.com/p/mpr2d/

2010년 3월 11일 목요일

서버에서 다운 받기 - Objective-c

erica 예제 c3-06-Synchronous Downloads


NSURL *url = [NSURL URLWithString: [urlArray objectAtIndex:[which intValue]]];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSURLResponse *response;
NSError *error;

NSData* result = [NSURLConnection sendSynchronousRequest:
theRequest
theRequest returningResponse:&response error:&error];



덤으로 무비 플레이어

- (void) startPlayback : (id) sender
{
MPMoviePlayerController* theMovie=[[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:self.savePath]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie];
[theMovie play];
}

2010년 1월 28일 목요일

개발자 관점의 iPad

기본 사양

- 9.7인치 멀티 터치스크린
- LED 백라이팅 IPS 디스플레이
- 두께 0.5인치(1.27cm)
- 무게 453g(1.5파운드)
- 가상 키보드 탑재
- 1GHz 애플 A4칩
- 16GB, 32GB, 64GB 플래시 메모리
- 3G 이동통신
- WiFi 무선인터넷
- 블루투스 기능 탐재
- 배터리는 최대 10시간 동영상 연속 재생 가능
- 가격은 499~829달러 (58~96만원)


고려해야 할 사항
기존의 아이폰 어플을 그대로 사용할수 있다고 함.
넓어진 화면 고려
아이폰을 가진 사람이 wi-fi 버젼을 구매할 가능성 고려
동영상 10시간 구동 배터리 (게임 종류의 어플에겐 더 없이 좋은 환경이 될듯)
외부 키보드 사용가능

Looks Like The Apple iPad Doesn't Have Flash, After All (워싱턴 포스트)  여전히 ipad도 플래시는 지원 하지 않을듯..ㅡㅡ;

Flash CS5가 기다려짐.




2010년 1월 7일 목요일

위자드팩토리 2010년 새해 소원 카드 위젯 달기


위자드팩토리의 2010년 새해 소원 카드 위젯을 블로그에 달아 보는 방법 입니다.
알고나면 쉬운 방법이지만 가끔은 모르는 분들도 있는 듯 해서 동영상으로 만들어 보았습니다.^^


이쁜 위젯들로 홈페이지를 이쁘게 치장해 보아요~  
추가로 다른 위젯들도 달아 보세요..

2010년 1월 1일 금요일

xcode 에서 회사 이름 바꾸기

Xcode에서 회사 이름 바꾸기

//
//  UITableView.h
//
//  Created by myname on 10. 1. 1..
//  Copyright 2010 __MyCompanyName__. All rights reserved.
//


주석에서 회사 이름을 변경하려면 터미널에서 아래 명령어를 실행하면 된다.

defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{ORGANIZATIONNAME="__MyCompanyName__";}'

2009년 12월 24일 목요일

아이폰 강좌

 

 

스프링노트에서 문서 올리기 테스트 중입니다. ..  이문서는 완료 되지 않았습니다.

Objective-C

 

 

참고

http://www.otierney.net/objective-c.html(영문)

 

 

이 글은 스프링노트에서 작성되었습니다.

2009년 12월 2일 수요일

git는 사용할만 한가? G..

git는 사용할만 한가?


Git는 cvs, svn 같은 프로젝트 관리 툴이다. 장단점이 있겠지만 둘 보다 좀더 나은 성능을 보인다고 한다.

svn 처럼 기본적으로는 커멘드 모드에서 명령으로 실행 되는 프로그램이다. 

편리하게 사용할수 있도록 대표적으로 아래의 둘과 같은 GUI Client 가 제공되고 있다.

windows 에는 tortoiseGit 가 있고 osx 에는 gitX 가 있다. 
tortoiseGit

gitX


Git 사용자 설명서(커멘드 명령어) 에는 한글로 설명된 자료들이 있고, gitX 매뉴얼 에는 영어로 된 설명 매뉴얼이 있다. 

로컬에서 커밋을 하고 서버와 동기화 되는 방식을 사용하므로 svn처럼 커밋하고 기다리지 않아서 좋고, 브랜치와 머지 방식이 좀 더 개선된것 같다. 

참고



2009년 11월 13일 금요일

Objective-C


iphone_hand-266x300.png



Objective-C의 기본적인 클래스 형태는 아래와 같다 .

[code]
//선언
@interface Song:NSObject
{
NSString *name; // 인스턴스 변수
NSString *age;
}
- (NSString*) name; // 인스턴스 메소드
- (NSString*) age;


//사용
Song mySong; //선언

[mySong name];

[/code]


Objective-C는 동적인 언어
런타임시에 객체가 변할수 있음.
id 라는 모든 객체를 포인팅 가능한 형이 있음 void와 유사함

Objective Messaging
메세지를 보낸다는 의미로 표현함

호출법
[receiver message]
받을 대상

비교
[myRect setWidth:10.0 height:17.0] <- 적용방법
- (void) setWidth:(float)width  height:(float) height  <- 메소드 형태

Polymorphism 다형성
연산자 오버로딩은 지원하지 않음



2009년 10월 16일 금요일

jing 스크린 캡쳐 프로그램 (mac)

맥에서도 사용이 편리한 동영상 캡쳐 프로그램



동영상을 찍어서 바로 올리는 기능도 있군요.
youtube 에 올리려면 pro버젼을 구매 해야 하는거 같습니다

2009년 9월 23일 수요일

파이썬에서 웹페이지 긁어 오기

php에는 아래와 같은 snoopy 라는 강력한 라이브러리가 있다.
[강좌] php용 강력하면서 쉬운 소켓(socket)클래스 , Snoopy

 

파이썬에는 없는 것일까? 찾아 보자.

1. BeautifulSoup 이라는 라이브러리가 있음.

2. 1.의 라이브러리는 느리다는 평이 있다.  아래는 직접 작업하기

[파이썬마을]특정 웹페이지의 링크의 일부 가져오기 (기본적인 답변)

[파이썬마을]urllib 모듈로 그림까지 가져오려면?? (쓸만한 답변코드 있음)

#! /usr/local/bin/python
# ex:ts=4
import urllib, urlparse
import re, os.path, os
urlfind1 = re.compile(r'[<](\w*)[^>]*[Ss][Rr][Cc]=([^"\' ]\S*)[^>]*[>]')
urlfind2 = re.compile(r'[<](\w*)[^>]*[Ss][Rr][Cc]=["\']([^"\']*)["\'][^>]*[>]')
def recurget(url, got=None, depth=0):
    if got is None: got = []
    print "   "*depth + "Getting %s ..." % url
    content = urllib.urlopen(url).read()
    urls = urlfind1.findall(content) + urlfind2.findall(content)
    filepath = urlparse.urlparse(url)[2][1:]
    try:
        os.makedirs(os.path.dirname(filepath))
    except OSError:
        pass
    open(filepath, "w").write(content)
    for tag, target in urls:
        turl = urlparse.urljoin(url, target)
        print "   "*depth + " + Tag found (%s to %s) => %s" % (tag, target, turl)
        if turl not in got:
            got.append(turl)
            recurget(turl, got, depth+1)
if __name__ == "__main__":
    import sys
    for url in sys.argv[1:]:
        recurget(url)

 

Python File Read Write with Urllib2

android 3D engine

동영상은 흐리다.  더 밝은 동영상이 youtube에도 아직 없다.
Video overcast. This youtube video has not yet even brighter.

http://rokon-android.blogspot.com/

http://code.google.com/p/rokon/

2009년 9월 19일 토요일

2009년 9월 11일 금요일

App Engine 기본구조 - 간단예제

 

기본 구조는 세 부분으로 구성되어 있다.

1. RequestHandler 클래스로 하나이상의 요청과 답변 처리

2. WSGIApplication 인스턴스로 URL을 통해 들어오는 요청을 처리

3. CGI Adapter로 WSGIApplication 메인루틴 실행

 

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app


class MainPage(webapp.RequestHandler): #클래스 선언
  def get(self): #함수의 선언
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, webapp World!')
    #여기가 함수의 종료점(파이썬은 띄어쓰기로 구분)
 
#'/' 로 들어 오는 요청을 MainPage 클래스와 연결
application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=True)

def main(): #메인루틴 실행 함수
  run_wsgi_app(application) #위에서 선언한 application을 실행함.

if __name__ == "__main__":
  main()
 
결과:
 

[관련글]
Hello, World! - Getting Started: Python - Google App Engine 
파이썬 구글 엡엔진 이클립스 개발환경 
Google App Engine