2010-03-20 1 views
9

다른 아이폰에서 실행되는 두 개의 동일한 앱간에 이미지 수정 동기화를 시도하고 있습니다. 하나의 장치에서 다른 장치로 NSSet *을 보내고 싶습니다. (NSData에서 캡슐화하는 것으로 상상합니다) NSSet으로 다시 해독 한 다음 touchesMoved 형식의 함수에서 사용합니다. 이게 가능한가, 아니면 대신 UIImages를 동기화해야합니까? UIImage 동기화가 실시간 상호 작용에 너무 많은 지연 시간을 가져올 것이라고 걱정됩니다.NSData를 NSSet으로 설정 한 다음 다시 나와 GameKit을 사용 하시겠습니까?

도움 주셔서 감사합니다.

답변

14

당신은 UITouchs 세트를 다루고 있습니다. 이것은 UITouch가 NSCoding을 구현하지 않기 때문에 작동하지 않습니다 (제 생각에).

각 UITouch에서 필요한 정보를 추출한 다음 NSCoding을 준수하는 항목에 입력해야합니다.

NSSet * someSet = ...; 
NSData * serializedSet = [NSKeyedArchiver archivedDataWithRootObject:someSet]; 

그런 다음이 데이터를 게임 키트를 사용하여 보내십시오.

다른 장치는 데이터를 받으면이를 다시 집합으로 변환합니다.

NSData * receivedData = ....; 
NSSet * set = [NSKeyedUnarchiver unarchiveObjectWithData:receivedData]; 

그런 다음 세트로 처리해야하는 방법을 직접 호출해야합니다. 여기에서 일부 UI 구성 요소를 변경할 가능성이 있으므로 선택기를 호출하여 주 스레드에서 실행되도록하십시오.

또한이 유형의 것은 처리중인 터치 이벤트가 상태가 저장되지 않은 경우에만 작동합니다. 즉, 터치가 있었던 위치가 중요하지 않습니다. 그렇지 않으면 몇 가지 문제가 발생할 수 있습니다. 터치 이벤트 이후에 변경된 사항을 추출한 다음 다른 장치로 보내고 UIImage가 변경된 방식의 델타로 다른 장치를 업데이트하는 것이 좋습니다 (즉, 어떤 유형의 처리가 다른 장치의 이미지에 발생 함).

+0

도움 주셔서 감사합니다. UIImage 비교를 수행하거나 두 UIImages 사이의 델타를 확인하는 방법이 있습니까? 또한 UIImage imageWithData가 작동하려면 JPG 이미지 형식이 필요합니까? PNG를 사용하면 나를 위해 던져하는 것 같습니다. 나는 불행히도 그들의 상태에 의존하기 때문에 내가 터치를 전송할 수있을 것이라고 생각하지 않습니다. 답장을 보내 주셔서 다시 한 번 감사드립니다. –