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) {
최근댓글