iOS 10 widget 3Dtouch 팝 업 메뉴 구현

4104 단어 ios103dtouchwidget
글 은 다음 과 같은 몇 가지 문제 부터 시작 하여 상세 하 게 설명 할 것 이다.
1.기 존 프로젝트 에 widget 을 추가 하 는 방법;
2、UI 그리 기;
3.app 을 어떻게 바 꿉 니까?
4.host app 과 데 이 터 를 공유 하 는 방법.

그림 2 today target 추가

그림 3 today 이후 프로젝트 디 렉 터 리 추가
Today Extension 을 추가 한 프로젝트 디 렉 터 리 입 니 다.
여기까지 기 존 프로젝트 에 Today Extension 을 추가 하 는 것 은 완 성 된 셈 이다.프로그램 을 실행 하면 그림 1 과 유사 한 간단 한 효 과 를 볼 수 있 고 간단 하 다.
UI 그리 기

그림 4 기본 으로 만 든 MainInterface 를 삭제 하고 Info.plist 를 수정 합 니 다.
기본 으로 만 든 MainInterface.storyboard 를 삭제 하고 그림 4 에 따라 Info.plist 파일 을 수정 합 니 다.(물론 storyboard 를 사용 하 는 습관 이 있 는 동 화 는 생략 하고 storyboar 를 직접 조작 할 수 있 습 니 다.

그림 5 widget 보기 크기 설정
우선,widget 전시 보기 의 크기 를 설정 합 니 다.widget 의 배경 색 과 구체 적 으로 보 여 주 는 내용 은 필요 에 따라 그립 니 다.여 기 는 잠시 표시 하지 않 습 니 다.

그림 6 widget 보기 거리 왼쪽 경계 거 리 를 0 으로 설정 합 니 다.
프로그램 을 실행 하면 문 제 를 발견 할 수 있 습 니 다.그 려 진 내용 은 왼쪽 경계 와 일정한 거리 가 있 습 니 다(약 30px).이 문 제 를 어떻게 해결 할 것 인가.그림 6 에서 보 듯 이 TodayViewController 가 준수 하 는 NC Widget Providing 프로 토 콜 은 해결 방안 을 제시 했다.
앱 바 꾸 기
extension 과 containing app 은 두 개의 독립 된 프로 세 스 이기 때문에 직접 통신 할 수 없습니다.(내부 버튼 을 누 르 고 지정 한 페이지 로 이동 할 수 없습니다.)widget 에서 app 을 바 꾸 기 위해 서 는 openURL 방식 으로 containing app 을 시작 합 니 다.

- (void)openURLContainingAPP{ //  extensionContext  host app  app [self.extensionContext openURL:[NSURL URLWithString:@"appextension://xxx"] completionHandler:^(BOOL success) { NSLog(@"open url result:%d",success); }];}
데이터 공유

그림 7 App Groups 추가
App Groups 가 제공 하 는 같은 group 내 app 공동 읽 기와 쓰기 영역 을 통 해 NSUserDefaults 와 NSFileManager 두 가지 방식 으로 extension 과 containing app 간 의 데이터 공 유 를 실현 할 수 있 습 니 다.
1 NSUserDefaults 를 통 해 데이터 공유
데이터 저장

- (void)saveDataByNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx"]; [shared setObject:@"asdfasdf" forKey:@"widget"]; [shared synchronize];}
데이터 읽 기

- (NSString *)readDataFromNSUserDefaults{ NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx"]; NSString *value = [shared valueForKey:@"widget"]; return value;}
2 NSFileManager 를 통 해 데이터 공유
데이터 저장

- (BOOL)saveDataByNSFileManager{ NSError *err = nil; NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxx"]; containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/widget"]; NSString *value = @"asdfasdfasf"; BOOL result = [value writeToURL:containerURL atomically:YES encoding:NSUTF8StringEncoding error:&err]; if (!result) { NSLog(@"%@",err); } else { NSLog(@"save value:%@ success.",value); } return result;}
데이터 읽 기

- (NSString *)readDataByNSFileManager{ NSError *err = nil; NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxx"]; containerURL = [containerURL URLByAppendingPathComponent:@"Library/Caches/widget"]; NSString *value = [NSString stringWithContentsOfURL:containerURL encoding:NSUTF8StringEncoding error:&err]; return value;}
    여기에 Today 에 애플 리 케 이 션 을 추가 한 widget 이 완성 되 었 습 니 다.Today 에서 미리 설 정 된 단축 서 비 스 를 조회 할 수 있 습 니 다.글 iOS 10 Today Widget 에 이 어 iOS 10 의 어 울 리 는 문 제 를 말 합 니 다.
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 iOS 10 widget 의 3Dtouch 팝 업 메뉴 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기