페이지 이동 조건 | API |
---|---|
Html -> Native | M.page.activity() 를 이용하여, Native 화면을 호출 |
Native -> Html | - (void) moveToWebOnNewActWithUrl:(NSString*)url paramObj:(PPParameters *)pParameters action:(PPActionType)pActionType orient:(PPSupportOrientation)pOrientationType animation:(PPAnimationType)pAnimationType; |
Native -> Native | - (void) moveToNativeActWithClass:(Class)className paramObj:(PPParameters *)pParameters action:(PPActionType)pActionType orient:(PPSupportOrientation)pOrientation animation:(PPAnimationType)pAnimationType; |
Native -> 이전화면 | - (void) historyBackWithParamObject:(PPParameters *)pParameters animation:(PPAnimationType)pAnimationType; |
Native -> PPActionClearTop 이동 | - (BOOL) moveClearTop:(NSString )pKey params:(PPP arameters)pParameters animation:(PPAnimationType)pAnimationType; |
파라미터 | 파라미터정의 | 비고 |
---|---|---|
PPAnimationType | PPAnimationDefault, PPAnimationSlideLeft, PPAnimationSlideRight, PPAnimationSlideTop, PPAnimationSlideBottom, PPAnimationNone, PPAnimationZoomIn, PPAnimationZoomOut, PPAnimationFade, PPAnimationFlipLeft, PPAnimationFlipRight, PPAnimationCurlUp, PPAnimationCurlDown, PPAnimationModalUp, PPAnimationModalDown, PPAnimationModalLeft, PPAnimationModalRight |
- 화면 전환간의 애니메이션 설정 |
PPActionType | PPActionNewScreen, PPActionNoHistory, PPActionClearTop, PPActionGotoTop, PPActionExtTabNewScreen, PPActionExtTabMoveTopScreen, PPActionExtTabBackScreen |
- 플랫폼의 화면 Stack 관리 옵션 |
PPSupportOrientation | PPSupportOrientationDefault, PPSupportOrientationPortrait, PPSupportOrientationLandscape, PPSupportOrientationReversiblePortrait, PPSupportOrientationReversibleLandscape, PPSupportOrientationAll |
- 화면의오리엔테이션설정 |
(참고) 일반적인 iOS UIViewController 개발 방법을 이용하여 확장 개발해도 동작하지만, 모피어스에서 제공하는 기능을 사용하지 못함.
데이터 유형은 String
구분 | 설명 | Web API | Native API |
---|---|---|---|
파라미터 공유 | - 화면 전환간 데이터 전달 - URL의 key=value 전달 방식 |
M.data.param | PPParameters |
전역 데이터 공유 | - Memory 저장 ( 휘발성 ) - 앱 실행 중, set/get - 앱 종료 시 데이터 삭제 |
M.data.global | PPAppContext._setGlobalValue |
영속 데이터 공유 | - 스토리지 ( UserDefault 저장 ) - 앱 실행 중, set/get |
M.data.storage | PPAppContext._setStorageValue |
구분 | 설명 |
---|---|
동기 | - native 함수의 return 값이 화면(js)으로 바로 전달되는 방식. |
비동기 | - native 함수의 결과 값을 js함수(cb js함수)를 통하여 화면(js)로 전달되는 방식. - 함수 호출 시 cb js함수의 전달 또는 prefix된 js함수로 결과 전달이 가능함. |
주의 사항: api 를 제외한 param 의 개수는 ExtendWNInterface에 만들어진 method 의 param 개수와 동일해야 함.
var data = {
name: 'mcore',
param: 'sync'
};
M.execute(“exWNCallSync”, data);
-(NSString *)exWNCallSync:(NSString *)params
{
NSLog(@“%@”, params);
NSDictionary *obj = [params objectFromJsonString];
return [obj jsonString];
}
Native의 java 함수를 async(비동기)방식으로 호출하는 JS함수.
WEB 호출 에시
var data = {
name: 'mcore',
param: 'async'
};
var callback = M.response.on( function( result ) {
console.log( result );
}).toString()
M.execute(“exWNCallAsync”, data, callback);
-(void)exWNCallAsync:(NSString *)params :(NSString *)callback
{
NSLog(@“%@”, params);
NSDictionary *obj = [params objectFromJsonString];
[self.viewctrl callCbfunction:callback withObjects:obj, nil];
}
주의 사항: iOS의 경우 노치영역이 있는 디바이스와 노치영역이 없고 홈버튼이 있는 디바이스 2가지 타입이 있어 각각 구현이 필요함
CGFloat topHeight = 40.0f;
CGFloat bottomHeight = 60.0f;
...
- (void) loadView {
[super loadView];
// NavigationBar 는 사용하지 않으므로 Hidden
self.navigationController.navigationBarHidden = YES;
//뷰 계층도 확인을 위한 safeArea 영역에 대한 색상 지정
[self.view setBackgroundColor:[UIColor blueColor]];
//뷰 계층도 확인을 위한 background 영역에 대한 색상 지정
[self.backgroundView setBackgroundColor:[UIColor grayColor]];
//뷰 계층도 확인을 위한 webView 영역에 대한 색상 지정
[self.poperaWebview setBackgroundColor:[UIColor orangeColor]];
//상하단 네이티브 뷰 추가와 웹뷰 사이즈를 조절
[self addViewCustomSize];
}
// backgroundView에 SafeArea를 적용할지에 대한 플래그
-(BOOL)useSafeArea
{
return YES;
}
-(void)addViewCustomSize
{
//상단 네이티브 뷰
UIView *topView = [[UIView alloc] init];
topView.tag = 100;
[self.backgroundView addSubview:topView];
[topView setFrame:CGRectMake(0, 0, self.backgroundView.frame.size.width, topHeight)];
[topView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin)];
[topView setBackgroundColor:[UIColor redColor]];
//하단 네이티브 뷰
UIView *bottomView = [[UIView alloc] init];
[self.backgroundView addSubview:bottomView];
[bottomView setBackgroundColor:[UIColor greenColor]];
[bottomView setFrame:CGRectMake(0, self.backgroundView.frame.size.height - bottomHeight, self.backgroundView.frame.size.width, bottomHeight)];
[bottomView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin)];
//웹뷰 사이즈 조절
[self.poperaWebview setFrame:CGRectMake(0, topHeight, self.backgroundView.frame.size.width, self.backgroundView.frame.size.height - topHeight - bottomHeight)];
}
// 노치 영역이 없는 디바이스에 대한 추가 구현이 필요한 부분의 시작
// 홈버튼이 있는 단말의 경우 getPoperaWebViewFrame을 사용할지에 대한 플래그값
-(BOOL)useCustomPoperaFrame
{
return YES;
}
// 홈버튼이 있는 단말의 경우 useStatusBarView 여부에 따라 20픽셀에 대한 처리가 있어 구현이 필요함
-(CGRect)getPoperaWebViewFrame
{
// 홈버튼 있는 경우 적용
int status = 20;
if([self useStatusBarView])
{
status = 20;
UIView *topView = [self.backgroundView viewWithTag:100];
[topView setFrame:CGRectMake(0, status, self.backgroundView.frame.size.width, topHeight)];
}
else
{
status = 0;
}
return CGRectMake(0, status + topHeight, self.backgroundView.frame.size.width, self.backgroundView.frame.size.height - status - bottomHeight - topHeight);
}
// 홈버튼이 있는 단말에서 상단 statusBar 영역을 비울지에 대한 플래그값
-(BOOL)useStatusBarView
{
return YES;
}