Presentation is loading. Please wait.

Presentation is loading. Please wait.

Speakers 이길복 MVP 휴즈플로우 CTO 주신영 MVP 스마트쉐어 CEO Windows 8.1: Free for all Windows 8 PCs.

Similar presentations

Presentation on theme: "Speakers 이길복 MVP 휴즈플로우 CTO 주신영 MVP 스마트쉐어 CEO Windows 8.1: Free for all Windows 8 PCs."— Presentation transcript:


2 Speakers 이길복 MVP 휴즈플로우 CTO 주신영 MVP 스마트쉐어 CEO

3 Windows 8.1: Free for all Windows 8 PCs

4 1

5 TextBlock

6 RichTextBlock

7 TextBox and PasswordBox

8 Input scope

9 DatePicker and TimePicker DatePicker TimePicker

10 Flyouts

11 AppBar

12 Image DecodePixelWidth/Height 불러올 때 크기를 제공하면 메모리를 절약할 수 있다. 퍼포먼스도 좋아진다. 확대 / 축소된 결과도 더 품질이 좋다.

13 2

14 Chinese French German Indian Italian Mexican Data Data template

15 ListView

16 GridView

17 Data Template FlipView

18 Panning perf overview – UI virtualization

19 8 8.1

20 가상화 불가 가상화 가능 가상화 불가

21 Large list performance += 퍼포먼스 개선 불필요한 엘리먼트의 생성을 줄이기. GridViewItemPresenter 의 사용.

22 Placeholders 로 가시적인 퍼포먼스 개선

23 Incrementally updating the data template GridView 의 ContainerContentChanging 이벤트

24 3

25 Windows 8 view states Full landscape Filled Snapped Full portrait

26 Windows in Windows 8.1 Wider than tall window Taller than w ide window

27 Windows 8.1 접근

28 App-specific visual states Visual States Visual states 는 UI 와 코드 를 분리해 주죠. 코드에서 수동으로 엘리먼 트 이동하고, 크기변경하고 하는 대신에 간단히 이 변 경사항들을 처리하는 Storyboard 를 가진 visual state 로 변경하는 게 깔끔 하죠.

29 Setting visual states from code Use constants Sizes and state names will almost certainly change during design iterations

30 방향과 위치

31 Window 크기

32 Handling the SizeChanged event 핸들러 제거하는 것 잊지 마세요 ! 팁 : 모든 닷넷 프로그램에서 메모리 누수가 발생하는 흔한 원인 중 하나가 제대로 이벤트 핸들러를 제거 하지 않는 것이다. 싱글턴 객체나 정적 클래스의 이벤트에 대한 핸들러는 꼭 제거합시다.

33 Show Create Setup window content Show a secondary view

34 4 Speech Synthesis

35 Speech synthesis  Voice  David(en-US, 남성 )  Zira(en-US, 여성 )  Hazel(en-UK, 여성 )  Heami(ko-KR, 여성 )  외 13 개국 음성 지원

36 Code Speech synthesis  단순 텍스트 음성 출력  synthesizeTextToStreamAsync  PC 의 위치 설정에 따라 음성 지원 var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer(); SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Welcome!"); media.SetSource(stream, stream.ContentType); media.Play();

37 Speech synthesis  SSML(Speech Synthesis Markup Language)  synthesizeSsmlToStreamAsync  음성 특징, 발음, 볼륨, 피치, 비율 / 속도, 강도 Code string Ssml = @" " + " Welcome! Shinyoung" + " " + "Have a good time" + " "; var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer(); SpeechSynthesisStream stream = await synth.SynthesizeSsmlToStreamAsync(Ssml); media.SetSource(stream, stream.ContentType); media.Play();

38 5 Contact & Appointment

39 Contact  People 앱을 통한 연락처 관리  이메일 및 소셜 계정의 연락처 연동됨  모든 연락처의 추가 / 수정 / 삭제  ContactPickerUI 를 통한 연락처들 호출  ContactManager.ShowContactCard() 를 통해 바로 원하는 연락처의 ContactCard 를 호출  대부분의 사용자는 개인정보 유출에 대한 우려로 앱 자체에서 연락처정보의 관리 / 보호 / 저장 하는 것을 원하지 않음.

40 Contact Picker  Appxmanifest 에서 Contact Picker 사용 선언

41 Contact Picker Code ContactPicker picker = new ContactPicker(); picker.SelectionMode = ContactSelectionMode.Contacts; // Contact contacts = await picker.PickContactAsync();// 1 개 IList contacts = await picker.PickContactsAsync();// 여러개 foreach (Contact contact in contacts) { // process each contact returned Debug.WriteLine(contact.FirstName + " " + contact.LastName); } ContactPickerUI 로 UI 를 커스텀 가능

42 Contact card Contact card workflow View Profile ContactManager From: Ben Miller

43 ContactManager Code Contact contact = new Contact(); contact.FirstName = " 주 "; contact.LastName = " 신영 "; ContactEmail email = new ContactEmail(); email.Address = “"; contact.Emails.Add(email); Rect rect = Helper.GetElementRect(sender as FrameworkElement); ContactManager.ShowContactCard(contact, rect, Windows.UI.Popups.Placement. Default);

44 Appointments  Calrendar 앱을 통한 일정 관리  이메일 및 소셜 계정의 일정 연동됨  모든 일정의 추가 / 수정 / 삭제  AppointmentManager. ShowAddAppointmentAsync(…) 를 통해 바로 원 하는 일정 ContactCard 를 호출

45 Appointments AppointmentManager. ShowAddAppointmentAsync(…)

46 Appointments Code private async void AddAppointment_Click(object sender, RoutedEventArgs e) { var appointment = new Appointment(); appointment.Subject = "Prepare for next session"; appointment.StartTime = DateTime.Now.AddMinutes(2); appointment.Duration = TimeSpan.FromHours(1); appointment.Location = "Speaker room"; appointment.Uri = new Uri(""); appointment.Sensitivity = AppointmentSensitivity.Public; appointment.Details = "Nothing like a little procrastination!";

47 Appointments Code Rect rect = Helper.GetElementRect(sender as FrameworkElement); var id = await AppointmentManager.ShowAddAppointmentAsync( appointment, rect, Windows.UI.Popups.Placement.Above); if (!string.IsNullOrEmpty(id)) ResultDisplay.Text = "Returned appointment id " + id; else ResultDisplay.Text = "Appointment not added."; }


49 6

50 Bluetooth in Windows 8.1 RFCOMM General device control Robots Sphero Netduino Gadgeteer More… GATT Custom and low-power devices Smart watches Health monitors Fitness monitors Home automation More… Windows 8.1 PC running your Windows Store app Windows.Devices.Bluetooth.RfcommWindows.Devices.Bluetooth.GenericAttributeProfile

51 Bluetooth Pairing

52 Bluetooth RFCOMM: Connection Windows.Devices.Bluetooth.RfcommDeviceService _service; Windows.Networking.Sockets.StreamSocket _socket; async void Initialize() { // Enumerate devices with the object push service DeviceInformationCollection _DICollection = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync( RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort)); if (_ DICollection.Count > 0) { // Typically, check protection level and version compatibility here // Initialize the target Bluetooth device _service = await RfcommDeviceService.FromIdAsync(services[0].Id); // Create a standard networking socket and connect to the target _socket = new StreamSocket(); await _socket.ConnectAsync(_service.ConnectionHostName, _service.ConnectionServiceName, SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication); // The socket is connected. Data transfer happens using standard WinRT Sockets API }

53 Bluetooth RFCOMM: receiving data Socket.. StreamSocketListener socketListener = new StreamSocketListener(); …. DataReader reader = new DataReader(socket.InputStream); // Read the message. uint messageLength = reader.ReadByte(); // Loads data from the input stream. uint actualMessageLength = await reader.LoadAsync(messageLength); // Reads a string value from the input stream. string message = reader.ReadString(actualMessageLength); …..

54 Package.appxmanifest 중요 !

55 Bluetooth GATT: receiving data The full heart rate monitor example is available at m.


57 7

58 Industry-leading economics Starts at 70% for new apps Jumps to 80% once your app makes $25,00 0

59 Developer registration $19 Individual $99 Business Registration covers both Windows and Windows Phone


61 Trials Matter 70x downloads 10% conversion 10x revenue Windows Phone Developer blog, March 2011

62 Simple time-based trials

63 Initialize the license Use the right license provider WinRT provides the CurrentAppSimulator for testing trial mode, in-app purchases, and more without you r app being listed in the Windows Store. CurrentApp is for submission to the Windows Store. You cannot submit an app which uses CurrentAppSimulator.

64 Handle license events

65 Conditionally enable features Hide or inform? You may find that providing a UI with a warning that the feature is only enabled in the full version is a bet ter approach than simply hiding the feature. Whenever you prompt, be sure to give the user the option t o purchase right then.




Download ppt "Speakers 이길복 MVP 휴즈플로우 CTO 주신영 MVP 스마트쉐어 CEO Windows 8.1: Free for all Windows 8 PCs."

Similar presentations

Ads by Google