2010년에 쓴 공략글을 오랜만에 뒤적거리다 보니 루저들의 여신인 니지노 사키가 빠져 있길래 6년만에 부랴부랴 플레이 후 추가.

특성은 그야말로 근성덕후. 입학 초 기준 근성이 약 40쯤 되면 등장한다. 그 외에 클럽으로 축구 혹은 야구를 선택하면 매니저로 등장. 클럽 활동을 쭉 이어나가고 싶다면 성적 관리도 웬만큼 해 주자. 물론 니지노를 불러 낸 후 클럽을 그만 둬도 공략에는 지장 없으니 선택은 스스로. 데이트 시 선택지는 너무 닭살돋는 말은 삼가고 되도록 무난한 선택지를 고르면 된다. 특히 '열심히', '노력'등의 단어가 들어간 것을 고르면 베스트. 반응은 대체로 평이하나 크게 호감도를 까먹을 일도 없어서 자주자주 만나주면 공략은 순탄한 편.

생일 선물은 스테인리스 요리세트, 거인의 별 전집(!), 요리철인의 비디오 4편 순서대로 주면 베스트.


공략을 위한 목표 스탯은 아래와 같다.


운동: 100이상

근성: 120이상

용모: 80이상


이번 공략에서는 호감도도 상당히 높고 공략도 매우 순탄했는데 랜덤 이벤트(도시락 쳐묵쳐묵 하기 등)가 하나도 안떠서 조금 심심했음. 하다못해 스타디움에서 야구경기 이벤트라도 나왔으면 좋았을 뻔 했는데 그조차도 없어서 좀 아쉬웠다.




WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

1. 프로젝트에 사용하고자 하는 폰트의 원도(otf, ttf 등)를 drag&drop으로 가져온다. (본 예제에서는 Noto Sans CJK KR medium을 사용했다.)


2. 아래와 같이 프로젝트의 info.plist에 Font provided by application을 등록하고 폰트 이름을 아이템에 넣어준다.



3. viewDidLoad 에 아래 코드를 넣고 빌드하면 콘솔에 사용 가능한 폰트 이름이 출력된다.


for name in UIFont.familyNames() {

            print(name)

            if let nameString = name as? String

            {

                print(UIFont.fontNamesForFamilyName(nameString))

            }

        }



4. 아래의 코드를 추가하여 폰트와 크기를 정한다.


myTextView.font = UIFont(name: "NotoSansCJKtc-Medium", size: 12)


5. PROFIT!


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

텍스트 속성 조절 가능한 UITextView의 subclass : MYTextFrame예제.

initializeTextBox()의 파라메터에 적절한 값을 넣어 주면 굴러감.


import UIKit


class MYTextFrame: UITextView {

    

    var contentText = NSString()

    

    func initializeTextBox(pathOfTextFile: String, typeOfExtension: String, spaceOfLine: CGFloat, canScroll: Bool, canEdit: Bool){

        

        //Text path

        let filePath = NSBundle.mainBundle().pathForResource(pathOfTextFile, ofType: typeOfExtension)

        

        //Text file to string

        do {

            contentText = try NSString(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding)

        } catch {

            contentText = "text is not found."

        }

                

        //Line Spacing

        let lineSpaceAmount = NSMutableParagraphStyle()

        lineSpaceAmount.lineSpacing = spaceOfLine

        self.attributedText = NSAttributedString(string: contentText as String, attributes: [NSParagraphStyleAttributeName:lineSpaceAmount])

        

        //Scrollable?

        self.scrollEnabled = canScroll


        //Editable?

        self.editable = canEdit

    }

    

}


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

SNS 프로필 사진에서 쓰이는 방식과 같이 원형 프레임 안에 사진을 넣고 비율을 맞추는 코드.


import UIKit


let myView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) //이미지뷰 만들기

myView.layer.cornerRadius = myView.frame.width / 2 //프레임을 원으로 만들기

let myImage = UIImage(named: "bruceLee.gif") //이미지 객체 생성

myView.image = myImage //이미지를 이미지뷰에 넣기

myView.contentMode = UIViewContentMode.ScaleAspectFill //이미지 비율 바로잡기

myView.clipsToBounds = true //이미지를 뷰 프레임에 맞게 clip하기


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

Segue를 이용해서 다른 ViewController에 데이터 전달하는 코드


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

if (segue.identifier == "targetSegue"){

let targetView : targetViewController = segue.destinationViewController as! targetViewController

targetView.targetVariable = thisViewControllerVariable

}


}


이쪽 뷰 컨트롤러의 thisViewControllerVariable 변수 값을 targetViewController의 targetVariable이라는 변수에 전달한다.

targetViewController에서는 targetVariable 이라는 변수를 선언하면 값은 자동으로 전달됨.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

아이폰 텍스트필드를 탭했을 때 나오는 키보드에 액세서리 뷰를 달아서 기타 콘트롤러를 붙일 수 있다.


import UIKit


class TextFieldWithAccessory: UITextField {


func makeAccessoryView(){

let numberToolBar : UIToolbar = UIToolbar(frame: CGRectMake(0, 0, self.frame.width, 40))

numberToolBar.barStyle = UIBarStyle.BlackTranslucent

let keyboardToolBarEmptySpace : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)

let keyboardToolBarDoneButton :UIBarButtonItem = UIBarButtonItem(title: "완료", style: UIBarButtonItemStyle.Done, target: self, action: "resignFirstResponder")

keyboardToolBarDoneButton.tintColor = UIColor.whiteColor()

numberToolBar.items = [keyboardToolBarEmptySpace,keyboardToolBarDoneButton]

numberToolBar.sizeToFit()

self.inputAccessoryView = numberToolBar

}

}


UIToolbar 인스턴스를 생성하고 프레임을 그린다음 왼쪽에 빈 공간을 채우고, 오른쪽 끝에 완료 버튼을 구성하는 코드이다.



WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

swift로 프로그래밍 하면서 UILabel이나 UIText 등의 폰트 이름을 바꿀 때 폰트 패밀리 이름을 몰라서 헤맬 때가 있는데 아래 함수를 한번 돌려주면 콘솔에 폰트 패밀리 이름을 쭉 뿌려줘서 편함.


func printFonts() {

let fontFamilyNames = UIFont.familyNames()

for familyName in fontFamilyNames {

print("------------------------------")

print("Font Family Name = [\(familyName)]")

let names = UIFont.fontNamesForFamilyName(familyName )

print("Font Names = [\(names)]")

}

}


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,



지난주에 여행을 다녀왔는데 겸사겸사 기내면세품으로 팔고 있는 A8을 14만원 정도에 지를 기회가 있어서 사왔음. A8이야 B&O 제품 치고 엄청 흔해 빠져서 이젠 많이들 쓰는 이어폰이지만 내 경우에는 음악감상용이 아니고 연주 모니터용으로 사용하기에 그에 대한 사용감을 짧게 적어보겠음.


본론으로 들어가기 전에 내가 A8을 사용하는 환경은 2012 펜더 아메리칸 스탠다드 재즈베이스에 아포지 잼 96K를 물려서 아이폰용 앰플리튜브 암펙 시뮬레이터로 뽑고 A8을 연결해 사용중임. 사진으로 보면 아래와 같음.




우선 내 주변에서는 A8을 감상용으로 쓰거나 써봤다는 사람들을 열 명쯤 찾아 볼 수 있었는데, 대부분 소리가 너무 플랫하고 특정 대역이 부스팅되지 않아서 두루두루 쓰기 껄끄럽다는 평을 하고 있었음. 그래서 맘에 안든다고 팔아먹은 경우도 다반사. 실제로 사용해 본 나의 느낌도 EQ를 걸지 않고 감상용으로 사용했을 때 소리가 플랫하고 뭔가 매가리가 없는 느낌이 있었기에 20만원씩이나 주고 감상용으로 이걸 사서 써야하나라는 생각이 들만 했음. 한마디로 감상할때 쓰기엔 내생각에도 가성비가 구림.


하지만 베이스를 연주하면서 물려 써보니 모니터용으론 상당히 괜찮은 축에 속하는 듯 함. 첫째로 가장 편했던 점은 녹음할 때 베이스가 들리지 않아서 베이스 트랙의 볼륨을 무작정 키우지 않아도 됐음. 기존에 쓰던 다른 헤드폰은 하이나 로우가 듣기좋게 프리셋된 상태라 베이스 연주를 모니터링 할 때에는 베이스 트랙이 너무 크게 들리거나 혹은 작게 들렸음. 그래서 녹음 다 해놓고 다른 스피커나 이어폰으로 들으면 느낌이 또 달라서 당최 적당한 볼륨 맞추기가 힘들었는데 A8의 경우는 오히려 특정 대역이 강조되지 않아서 적당히 잘 들리도록 볼륨 맞춰놓고 녹음하면 다른 헤드폰으로 들었을 때도 다른 악기 소리나 MR트랙과 잘 섞여서 무난무난하게 잘 들리는 장점이 있음.


두번째는 귀가 시원했음. 요새같은 날씨에도 헤드폰 뒤집어 쓰고 한 30분 치고 놀면 귀때기에서 땀이 엄청 나고 그게 또 헤드폰 가죽부분이랑 닿으면 느낌이 이루 말할 수 없이 거지같았음. 그렇다고 오픈형 이어폰을 끼면 연주하다가 자꾸 귀에서 빠지고 내 귀는 커널형도 밀어내는 이상한 귀라 아무튼 자꾸 이어폰이 빠져서 짜증났는데 A8은 귀걸이가 있어서 그런거 없고 좋았음.


좋은 점은 이정도고 나쁜 점도 몇개 있었는데 첫째로 풀볼륨에서 로우 E를 썸슬랩으로 때리면 진동판 째지는 소리같은게 들림. 찌지직 거리는 소리가 들리는데 꽤 기분이 나빠서 볼륨을 크게 할 수 없었음. 게인량을 줄여도 볼륨이 만땅이면 이 소리는 변함없이 나는걸 보니 게인의 문제는 아닌거같음. 암펙 앰프 기능인 Ultra Hi 랑 Low도 무관하게 볼륨이 만땅이라면 어쨋든 째지는 소리가 들림. 둘째는 줄이 짧음. 그래서 이어폰 연장선을 반드시 구매해야됨. 큰돈은 아니지만 몇천원 더 지출해야 되는게 약간 마이너스. 물론 감상용으로만 쓸거면 그런거 없어도 되지만 난 그런 용도는 아니니까 이것도 단점이라고 적을 수 있음.


여튼 돈값은 하고 총알이 넉넉하다면 하나 질러서 더운 여름에 헤드폰 대신 뒤집어 쓰고 악기 연주할 수 있어서 좋은 이어폰임. 감상용으론 호불호가 갈리지만 연주용으론 추천하고 싶음.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

step 1

우선 storyboard 에서 UIImageView 객체를 하나 집어넣고 적당힌 이미지를 입힌 다음 객체 속성에서 User Interaction Enabled를 체크해 준다.

그 다음 UIImageView 객체를 헤더 파일로 우클릭-드래그 해서 property로 선언하고 pinchGestureImage 로 이름짓는다.

이것으로 스토리보드에서 할일은 끝.


step 2

다음은 헤더에서 프로퍼티와 터치 입력이 발생했을 때 사용할 메서드를 선언해준다.


ViewController.h

--


#import <UIKit/UIKit.h>


@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIImageView *pinchGestureImage; //터치 제스쳐가 일어날 UIImageView

@property UIAlertView *myAlert; //액션이 일어났을 보여줄 팝업창


-(void)pinchEnabled:(UIPinchGestureRecognizer *)recognizer; //이미지를 핀치했을때 동작할 메서드


@end


--


step 3

다음은 구현부에서 메서드를 정의해준다.

(XCode에서 자동으로 생성하는 부분-[super viewDidLoad] 등-은 제외함)


ViewController.m

--


//property 들을 synthesize 해준다.

@synthesize pinchGestureImage;

@synthesize myAlert;


-(void)pinchEnabled:(UIPinchGestureRecognizer *)recognizer

{

if (recognizer.state == UIGestureRecognizerStateBegan) //UIPinchGestureRecognizer 객체의 상태가 '시작'상태일

{

myAlert = [[UIAlertView alloc]initWithTitle:nil message:@"Hello!" delegate:nil cancelButtonTitle:@"close" otherButtonTitles:nil, nil]; //팝업창의 속성을 이와 같이 정의하고

[myAlert show]; //팝업을 띄운다

}

}


- (void)viewDidLoad {

UIPinchGestureRecognizer *myPinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchEnabled:)]; //myPinchGesture 라는 터치 제스쳐를 하나 만들고 init하면서 target self, 제스쳐를 입력받아 동작한다면 pinchEnabled: 메서드를 따르도록 한다.

[pinchGestureImage addGestureRecognizer:myPinchGesture]; //myPinchGesture pinchGestureImage 심는다.

}


@end


--


이제 시뮬레이터에서 앱을 빌드하면 아래와 같은 화면이 보인다.



그리고 이미지를 pinch 하면 팝업이 동작한다.



UIPinchGestureRecognizer 를 UILongTabRecognizer 등으로 교체하여 롱탭, 탭 등의 다른 제스쳐로도 응용 가능함.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

UIGestureRecognizer 등의 방법을 쓸 수도 있으나

일단 ViewController에 아래 메소드를 입력하면 됨.


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

for (UIView * youtxtfl in self.view.subviews){

if ([youtxtfl isKindOfClass:[UITextField class]] && [youtxtfl isFirstResponder]) {

[youtxtfl resignFirstResponder];

}

}

}




WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,