Level : WORDPRESS BOOK LINKEDIN PATENT Send Mail 동냥하기 hajunho.com

487

살며 생각하며, / / 2020. 6. 14. 23:04
반응형

customized LaunchView adding in xcode using objective-c

런치뷰는 좀 전에 올렸던 스토리보드로 만드는 방식도 있지만 뷰로 만들어도 된다.

 

LaunchView 파일 2개 만든다. .h, .m

헤더에 선언하고 

@property (weak, nonatomic) LaunchView *viewLaunch;

파일에서 

#import 한 후

#import "LaunchView.h"

LaunchView *viewLaunch = [[LaunchView alloc] init];

viewLaunch.frame = _viewBanner.frame = _viewConsul.frame =

CGRectMake(0, 0, _viewFullScreen.frame.size.width, _viewFullScreen.frame.size.height);

뷰를 추가한다.


[_viewFullScreen addSubview:_viewLaunch];


시간 추가




if (eTimerState == TIMER_LAUNCH) { 

viewLaunch.hidden = NO; 

CFTimeInterval cTime = CFAbsoluteTimeGetCurrent(); 

if (cTime - sTime > 4.5f) { 

viewLaunch.hidden = YES; 


eTimerState = TIMER_INIT; 

} 

 

 

view hide, show 방식보다는 프레임웍을 제공하는 회사(애플)에서 제공하는 앱 개발 프레임을 지키는 것이 중요하므로 걷어내면서 남겨둔다.

 

AppDelegate.m 에

[NSThread sleepForTimeInterval:4];

넣으면 딜레이를 줄 수 있다.

 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

// Override point for customization after application launch. 


[NSThread sleepForTimeInterval:4];



 

xcode objective-c project 에 swift storyboard & code 추가

LaunchScreen.storyboard가 없으면 스토리 보드 추가한다.

런치스크린을 화려하게 하려면 파일이 많이 필요하니

new group with folder 로 폴더를 하나 생성해서 그 안에 만들어 준다.

LaunchScreen.swift 파일 만들어 준다.

Would you like to configure an Objective-C bridging header?

창이 뜨면 브리징 헤더를 만들어 준다.

빈 헤더 파일이 하나 생성된다.

Launch screen interface file base name

에서 LaunchScreen 을 적어 준다.

Use as launch screen에 체크가 되어 있으면

LaunchScreen.storyboard: error: Illegal Configuration: Launch screens may not set custom classnames

 

이런 에러가 나니 주의하자.

 

인터넷에 나온 것 같이 딱히 컴파일러 설정을 하지 않아도 objective-c 안에서 swift 모듈이 잘 돈다.

 

 

백그라운드 영상을 넣기 위해 

 

https://github.com/Guzlan/BackgroundVideoiOS

 

모듈을 썼는데 obj-c 로 먼저 해보고 swift 로 바꿔보면 도움이 될 것 같다.

 

런치 스크린은 스토리 보드로 떨어져 있지 않고 view에 바로 뿌리게 되어 있었는데

 

swift 로 코드를 바꿀 때 굳이 서로 참조 하지 않고 가능한 부분은 우선 바꾸어 보자는 생각에서

 

스토리 보드 중심으로 바꾸어 보았다.

 

보통 커다란 마이그레이션 전에는 작은 성공들을 해봐야 끝까지 갈 수 있으니깤ㅋㅋㅋ

 

-090-909-09-09-09-9-090-9-09-09-099-9=9=9=9=

게임 룰이 자주 바뀌어서 수정이 너무 힘들다.

debugPrint("\n demo1checking " + (GS.s.hjhBlocStorage?[vX, vY + 1]?.mSprite!.description ?? "NONE") ?? "NOTHING")

 

 

//            let hjhAction002 = SKAction.scale(to: 0, duration: 0.5)

           

//            deletingMeFromStorage()

//? SKSpriteNode ?? SKSpriteNode())

 

 

     //                Toast.showBlack(message: bloc.mBlocType.description + " and " + prevBloc!.mBlocType.description)

        //                Toast.showBlack(message: bloc.mXposition.description + "," + bloc.mYposition.description + " and " + prevBloc!.mXposition.description + "," + prevBloc!.mYposition.description)

        //TODO: making "nil" type

 

i//

    //    fileprivate func tigRules2(_ vUpperBloc: AtomicBloc, _ vX: Int, _ vY: Int, _ effectX: CGFloat, _ effectY: CGFloat) {

    ////        Shape.random(startingColumn: GS.s.hjhPreviewXposition, startingRow: GS.s.hjhPreviewYposition)

    //        var tigRulesY : Int = vUpperBloc.mYposition

    //

    //        while checkingDrawOrWin(typeUpper: vUpperBloc.mBlocType, typelower: GS.s.hjhBlocStorage?[vX, tigRulesY + 1]?.mBlocType ?? hjhBlocType.Rock) {

    //            debugPrint("tigRules2", vUpperBloc.mYposition)

    //

    //            GS.s.hjhBlocStorage?[vX, tigRulesY + 1]?.mSprite?.alpha = 1000

    //            let hjhAction002 = SKAction.scale(to: 0, duration: 0.5)

    //            GS.s.hjhBlocStorage?[vX, tigRulesY + 1]?.mSprite?.run(

    //                SKAction.sequence(

    //                [SKAction.group([hjhAction002]),

    //                 SKAction.removeFromParent()]

    //                )

    //            )

    //

    //            GS.s.hjhBlocStorage?[vX, tigRulesY + 1]?.deletingMeFromStorage()

    //

    //            let moveAction = SKAction.move(to: GS.s.gameScene?.spritePositionCalculator_(column: vX, row: tigRulesY + 1) ?? CGPoint(x: 0,y: 0), duration: TimeInterval(0.2))

    //            moveAction.timingMode = .easeOut

    //            GS.s.hjhBlocStorage?[vX, tigRulesY]?.mSprite?.run(SKAction.sequence([SKAction.group([moveAction])

    //                ,SKAction.removeFromParent()

    //                ]))

    //

    //            GS.s.hjhBlocStorage?[vX, tigRulesY]?.deletingMeFromStorage()

    //

    //            let effect = eff_baamTwoBlocks(x: effectX, y: effectY)

    //            GS.s.gameScene?.addChild(effect)

    //            totalScore += 10

    //            tigRulesY += 1

    //

    //            if tigRulesY >= GS.s.hjhMaxBlocksVertical - 1 {

    ////                GS.s.hjhBlocStorage?[vX, GS.s.hjhMaxBlocksVertical - 1] = vUpperBloc

    //                break

    //            } else {

    ////                GS.s.hjhBlocStorage?[vX, tigRulesY] = vUpperBloc.copy(column: vUpperBloc.mXposition, row: vUpperBloc.mYposition, type: vUpperBloc.mBlocType)

    //            }

    //        }

    //    }

    //

    //

   

let yae : Int = vY + 1

            debugPrint("vxvy : ", vX, vY, yae)

           

 

//        let abb = GS.s.hjhBlocStorage?[self.mXposition, self.mYposition]

//        abb?.copy(column: Int, row: <#T##Int#>, type: <#T##hjhBlocType#>, sprite: <#T##SKSpriteNode#>)

//        var copied_item = abb?.copy(column: abb?.mXposition ?? 0, row: abb?.mYposition ?? 0, type: abb?.mBlocType ?? hjhBlocType.random(), sprite: abb!.mSprite!)

//        copied_item?.mYposition = (copied_item?.mYposition ?? 0) + 1   Use of unimplemented initializer

 

 

switch GS.s.tigRuleIndex {

 

 

            case 2 : //stage 2

                onlyTheRule(bloc, vX, vY, effectX, effectY)

            case 3 : //stage 3

                onlyTheRule(bloc, vX, vY, effectX, effectY)

            case 4 : //stage 4

                onlyTheRule(bloc, vX, vY, effectX, effectY)

            case 5 : //stage 4

                onlyTheRule(bloc, vX, vY, effectX, effectY)

            case 6 : //stage 4

                onlyTheRule(bloc, vX, vY, effectX, effectY)

            default: //stage 1

                onlyTheRule(bloc, vX, vY, effectX, effectY)

            

//        if bloc.mYposition != (GS.s.hjhMaxBlocksVertical - 1) && GS.s.hjhBlocStorage?[vX, vY + 1] != nil {

       

        //                    fileprivate func onlyTheRule(_ bloc: AtomicBloc, _ vX: Int, _ vY: Int, _ effectX: CGFloat, _ effectY: CGFloat) {

 

 

반응형

'살며 생각하며,' 카테고리의 다른 글

490  (0) 2020.06.14
489  (0) 2020.06.14
486  (0) 2020.06.14
485  (0) 2020.06.14
484  (0) 2020.06.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기