Commit 03a8708ee32eced7335c64cd8be7fbcae9946f3d

Authored by nvtu11790@gmail.com
1 parent da40f74562

Finish create group screen, add API create group, optimize UX when search group

Showing 12 changed files with 859 additions and 5 deletions Side-by-side Diff

LifeLog/LifeLog.xcodeproj/project.pbxproj
... ... @@ -58,6 +58,8 @@
58 58 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E491F35AA180059355A /* HistoryObject.m */; };
59 59 E9373E4D1F361A230059355A /* HistoryGraphObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9373E4C1F361A230059355A /* HistoryGraphObject.m */; };
60 60 E9497FD51F46EC1100E6AF8D /* MemberObject.m in Sources */ = {isa = PBXBuildFile; fileRef = E9497FD41F46EC1100E6AF8D /* MemberObject.m */; };
  61 + E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */; };
  62 + E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */; };
61 63 E9682E2E1F39675A00FE05A2 /* RankingTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */; };
62 64 E9682E2F1F39675A00FE05A2 /* RankingTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */; };
63 65 E968550A1F3C444900317CEF /* AutoTransButton.m in Sources */ = {isa = PBXBuildFile; fileRef = E96855091F3C444900317CEF /* AutoTransButton.m */; };
... ... @@ -184,6 +186,9 @@
184 186 E9373E4C1F361A230059355A /* HistoryGraphObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HistoryGraphObject.m; sourceTree = "<group>"; };
185 187 E9497FD31F46EC1100E6AF8D /* MemberObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemberObject.h; sourceTree = "<group>"; };
186 188 E9497FD41F46EC1100E6AF8D /* MemberObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MemberObject.m; sourceTree = "<group>"; };
  189 + E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CreateGroupViewController.h; sourceTree = "<group>"; };
  190 + E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CreateGroupViewController.m; sourceTree = "<group>"; };
  191 + E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CreateGroupViewController.xib; sourceTree = "<group>"; };
187 192 E9682E2B1F39675A00FE05A2 /* RankingTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RankingTableViewCell.h; sourceTree = "<group>"; };
188 193 E9682E2C1F39675A00FE05A2 /* RankingTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RankingTableViewCell.m; sourceTree = "<group>"; };
189 194 E9682E2D1F39675A00FE05A2 /* RankingTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RankingTableViewCell.xib; sourceTree = "<group>"; };
... ... @@ -436,6 +441,7 @@
436 441 6E84E3AC1F27A954001EB88E /* SNS */ = {
437 442 isa = PBXGroup;
438 443 children = (
  444 + E95F4CE91F475C4B00D27E80 /* CreateGroup */,
439 445 E933E6751F4050E6002926F5 /* GroupDetail */,
440 446 E933E6671F3E0479002926F5 /* SeachGroup */,
441 447 6E84E3BC1F27A9B1001EB88E /* SNSViewController.h */,
... ... @@ -581,6 +587,16 @@
581 587 name = AutoTranslateView;
582 588 sourceTree = "<group>";
583 589 };
  590 + E95F4CE91F475C4B00D27E80 /* CreateGroup */ = {
  591 + isa = PBXGroup;
  592 + children = (
  593 + E95F4CEA1F475C6A00D27E80 /* CreateGroupViewController.h */,
  594 + E95F4CEB1F475C6A00D27E80 /* CreateGroupViewController.m */,
  595 + E95F4CEC1F475C6A00D27E80 /* CreateGroupViewController.xib */,
  596 + );
  597 + name = CreateGroup;
  598 + sourceTree = "<group>";
  599 + };
584 600 E99E13A71F336F0C00C78787 /* CustomView */ = {
585 601 isa = PBXGroup;
586 602 children = (
... ... @@ -714,6 +730,7 @@
714 730 buildActionMask = 2147483647;
715 731 files = (
716 732 9CBDA1001F2F03810055DED1 /* RegisterViewController.xib in Resources */,
  733 + E95F4CEE1F475C6A00D27E80 /* CreateGroupViewController.xib in Resources */,
717 734 6E18CED41F2E39DB0029891F /* LoginViewController.xib in Resources */,
718 735 E99E13AD1F336F4500C78787 /* CollectionView.xib in Resources */,
719 736 6E84E3BB1F27A9A0001EB88E /* RankingViewController.xib in Resources */,
... ... @@ -827,6 +844,7 @@
827 844 6EDC8BF41F2C68D700765ACC /* CMMotionActivityExtra.m in Sources */,
828 845 E933E6791F40513C002926F5 /* GroupDetailViewController.m in Sources */,
829 846 6EA4AF311F40BB7A00F52CFE /* StepObject.m in Sources */,
  847 + E95F4CED1F475C6A00D27E80 /* CreateGroupViewController.m in Sources */,
830 848 9CBDA0FF1F2F03810055DED1 /* RegisterViewController.m in Sources */,
831 849 E9373E4A1F35AA180059355A /* HistoryObject.m in Sources */,
832 850 9CA8AEEA1F31BB4600C5FC74 /* ConfirmForgetPassViewController.m in Sources */,
LifeLog/LifeLog/BaseTableViewController.m
... ... @@ -61,6 +61,9 @@
61 61 }
62 62 if(error == nil) {
63 63 if(array.count != 0) {
  64 + if(_curPage == 1) {
  65 + [_curDataList removeAllObjects];
  66 + }
64 67 [_curDataList addObjectsFromArray:array];
65 68 dispatch_async(dispatch_get_main_queue(), ^{
66 69 [weakSelf.tableBase reloadData];
LifeLog/LifeLog/CreateGroupViewController.h
  1 +//
  2 +// CreateGroupViewController.h
  3 +// LifeLog
  4 +//
  5 +// Created by nvtu on 8/19/17.
  6 +// Copyright ยฉ 2017 PhongNV. All rights reserved.
  7 +//
  8 +
  9 +#import <UIKit/UIKit.h>
  10 +#import "BaseViewController.h"
  11 +#import "AutoTransButton.h"
  12 +#import "Utilities.h"
  13 +#import "Entities.h"
  14 +
  15 +@interface CreateGroupViewController : BaseViewController<UITextFieldDelegate, UITextViewDelegate>
  16 +
  17 +@property (weak, nonatomic) IBOutlet UITextField *textName;
  18 +@property (weak, nonatomic) IBOutlet UITextField *textGoalWalk;
  19 +@property (weak, nonatomic) IBOutlet UITextField *textGoalRun;
  20 +@property (weak, nonatomic) IBOutlet UITextField *textGoalBike;
  21 +
  22 +@property (weak, nonatomic) IBOutlet UITextView *textGoal;
  23 +
  24 +@property (weak, nonatomic) IBOutlet UISwitch *switchWalk;
  25 +@property (weak, nonatomic) IBOutlet UISwitch *switchBike;
  26 +@property (weak, nonatomic) IBOutlet UISwitch *switchRun;
  27 +@property (weak, nonatomic) IBOutlet UISwitch *switchStep;
  28 +@property (weak, nonatomic) IBOutlet UISwitch *switchGym;
  29 +@property (weak, nonatomic) IBOutlet UISwitch *switchBegin;
  30 +
  31 +@property (copy) void (^createGroupSuccess)(GroupObject * group);
  32 +
  33 +- (IBAction)clickBack:(UIButton *)sender;
  34 +- (IBAction)clickCreateGroup:(AutoTransButton *)sender;
  35 +
  36 +@end
LifeLog/LifeLog/CreateGroupViewController.m
  1 +//
  2 +// CreateGroupViewController.m
  3 +// LifeLog
  4 +//
  5 +// Created by nvtu on 8/19/17.
  6 +// Copyright ยฉ 2017 PhongNV. All rights reserved.
  7 +//
  8 +
  9 +#import "CreateGroupViewController.h"
  10 +#import "ServerAPI.h"
  11 +
  12 +@interface CreateGroupViewController ()
  13 +
  14 +@end
  15 +
  16 +@implementation CreateGroupViewController
  17 +
  18 +- (void)viewDidLoad {
  19 + [super viewDidLoad];
  20 + // Do any additional setup after loading the view from its nib.
  21 +}
  22 +
  23 +- (void)didReceiveMemoryWarning {
  24 + [super didReceiveMemoryWarning];
  25 + // Dispose of any resources that can be recreated.
  26 +}
  27 +
  28 +#pragma mark IBAction
  29 +
  30 +- (IBAction)clickBack:(UIButton *)sender {
  31 + [self.navigationController popViewControllerAnimated:true];
  32 +}
  33 +
  34 +- (IBAction)clickCreateGroup:(AutoTransButton *)sender {
  35 + NSString *name = self.textName.text;
  36 + NSString *goal = self.textGoal.text;
  37 + if(name.length == 0) {
  38 + [Utilities showErrorMessage:@"Fill name of group!" withViewController:self];
  39 + return;
  40 + }
  41 + else if(name.length >= 255) {
  42 + [Utilities showErrorMessage:@"Name of group is too long!" withViewController:self];
  43 + return;
  44 + }
  45 + else if(goal.length == 0) {
  46 + [Utilities showErrorMessage:@"Fill information for goal of group" withViewController:self];
  47 + return;
  48 + }
  49 + if(self.switchWalk.on && [self.textGoalWalk.text intValue] == 0) {
  50 + [Utilities showErrorMessage:@"Add goal for walk mode" withViewController:self];
  51 + return;
  52 + }
  53 + if(self.switchBike.on && [self.textGoalBike.text intValue] == 0) {
  54 + [Utilities showErrorMessage:@"Add goal for bike mode" withViewController:self];
  55 + return;
  56 + }
  57 + if(self.switchRun.on && [self.textGoalRun.text intValue] == 0) {
  58 + [Utilities showErrorMessage:@"Add goal for run mode" withViewController:self];
  59 + return;
  60 + }
  61 + GroupObject *object = [[GroupObject alloc] init];
  62 + object.name = name;
  63 + object.goal = goal;
  64 + object.walkMode = self.switchWalk.on;
  65 + object.runMode = self.switchRun.on;
  66 + object.bikeMode = self.switchBike.on;
  67 + object.stepMode = self.switchStep.on;
  68 + object.gymMode = self.switchGym.on;
  69 + object.beginMode = self.switchBegin.on;
  70 + object.walkGoal = [self.textGoalWalk.text intValue];
  71 + object.bikeGoal = [self.textGoalBike.text intValue];
  72 + object.runGoal = [self.textGoalRun.text intValue];
  73 +
  74 + NSLog(@"%@", object.name);
  75 + NSLog(@"%@", object.goal);
  76 + NSLog(@"%d", object.walkGoal);
  77 + NSLog(@"%d", object.bikeGoal);
  78 + NSLog(@"%d", object.runGoal);
  79 + NSLog(@"%d", object.walkMode);
  80 + NSLog(@"%d", object.runMode);
  81 + NSLog(@"%d", object.bikeMode);
  82 + NSLog(@"%d", object.stepMode);
  83 + NSLog(@"%d", object.gymMode);
  84 + NSLog(@"%d", object.beginMode);
  85 +
  86 + NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
  87 + MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
  88 + [[ServerAPI server] requestCreateGroup:token withGroup:object CompletionHandler:^(GroupObject * group, NSError * error) {
  89 + CreateGroupViewController __weak *weakSelf = self;
  90 + if(error == nil) {
  91 + dispatch_async(dispatch_get_main_queue(), ^{
  92 + if(weakSelf.createGroupSuccess != nil) {
  93 + [hudView hideAnimated:true];
  94 + [weakSelf clickBack:nil];
  95 + weakSelf.createGroupSuccess(object);
  96 + }
  97 + });
  98 + }
  99 + else {
  100 + dispatch_async(dispatch_get_main_queue(), ^{
  101 + [hudView hideAnimated:true];
  102 + NSString *message = [error.userInfo objectForKey:@"message"];
  103 + [Utilities showErrorMessage:message withViewController:weakSelf];
  104 + });
  105 + }
  106 + }];
  107 +}
  108 +
  109 +#pragma mark UITextView Delegate
  110 +
  111 +-(BOOL) textFieldShouldReturn:(UITextField *)textField {
  112 + [self.view endEditing:true];
  113 + return true;
  114 +}
  115 +
  116 +@end
LifeLog/LifeLog/CreateGroupViewController.xib
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="12118" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
  3 + <device id="retina4_7" orientation="portrait">
  4 + <adaptation id="fullscreen"/>
  5 + </device>
  6 + <dependencies>
  7 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
  8 + <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
  9 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
  10 + </dependencies>
  11 + <objects>
  12 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CreateGroupViewController">
  13 + <connections>
  14 + <outlet property="switchBegin" destination="e63-8i-6aa" id="bbT-m6-3CV"/>
  15 + <outlet property="switchBike" destination="fGW-Vw-PwQ" id="ncx-kP-qdd"/>
  16 + <outlet property="switchGym" destination="Yga-UQ-xoU" id="rIN-kO-wmO"/>
  17 + <outlet property="switchRun" destination="2gX-B2-tkR" id="yak-gV-Cas"/>
  18 + <outlet property="switchStep" destination="RoR-w7-dNT" id="19b-K3-qAu"/>
  19 + <outlet property="switchWalk" destination="3xD-aH-JHl" id="OZ9-l7-Rww"/>
  20 + <outlet property="textGoal" destination="hWb-vU-yVd" id="dp0-yK-P60"/>
  21 + <outlet property="textGoalBike" destination="eOi-eo-GYn" id="qfW-ns-tsM"/>
  22 + <outlet property="textGoalRun" destination="3aE-uP-KLS" id="WAE-tl-O94"/>
  23 + <outlet property="textGoalWalk" destination="4JZ-J2-3D9" id="yHV-mB-rcn"/>
  24 + <outlet property="textName" destination="pXO-K0-vne" id="ePQ-35-RLr"/>
  25 + <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
  26 + </connections>
  27 + </placeholder>
  28 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
  29 + <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
  30 + <rect key="frame" x="0.0" y="0.0" width="320" height="626"/>
  31 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  32 + <subviews>
  33 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QYv-QM-Bkk" userLabel="ViewHeader">
  34 + <rect key="frame" x="0.0" y="0.0" width="320" height="46"/>
  35 + <subviews>
  36 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใƒผใ€€ใ‚ฐใƒซใƒผใƒ—ไฝœๆˆ" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9hM-Gv-AxQ" customClass="AutoTransLabel">
  37 + <rect key="frame" x="0.0" y="0.0" width="320" height="46"/>
  38 + <fontDescription key="fontDescription" type="system" pointSize="16"/>
  39 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  40 + <nil key="highlightedColor"/>
  41 + <userDefinedRuntimeAttributes>
  42 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.title"/>
  43 + </userDefinedRuntimeAttributes>
  44 + </label>
  45 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="O23-Hy-4Ld">
  46 + <rect key="frame" x="0.0" y="5" width="70" height="36"/>
  47 + <constraints>
  48 + <constraint firstAttribute="width" constant="70" id="8vZ-Ta-Rzv"/>
  49 + </constraints>
  50 + <state key="normal" image="today_back_button"/>
  51 + <connections>
  52 + <action selector="clickBack:" destination="-1" eventType="touchUpInside" id="BO6-jx-vuO"/>
  53 + </connections>
  54 + </button>
  55 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fPg-VP-VkU">
  56 + <rect key="frame" x="275" y="0.0" width="45" height="46"/>
  57 + <constraints>
  58 + <constraint firstAttribute="width" constant="45" id="k1W-Oc-mRq"/>
  59 + </constraints>
  60 + <state key="normal" image="icon_menu"/>
  61 + </button>
  62 + </subviews>
  63 + <color key="backgroundColor" red="0.098039215690000001" green="0.098039215690000001" blue="0.098039215690000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  64 + <constraints>
  65 + <constraint firstAttribute="trailing" secondItem="9hM-Gv-AxQ" secondAttribute="trailing" id="5f8-Xt-vKd"/>
  66 + <constraint firstAttribute="bottom" secondItem="9hM-Gv-AxQ" secondAttribute="bottom" id="Q3z-hF-VbV"/>
  67 + <constraint firstItem="9hM-Gv-AxQ" firstAttribute="top" secondItem="QYv-QM-Bkk" secondAttribute="top" id="XNi-3d-xFW"/>
  68 + <constraint firstItem="O23-Hy-4Ld" firstAttribute="leading" secondItem="QYv-QM-Bkk" secondAttribute="leading" id="aMc-uz-vGA"/>
  69 + <constraint firstItem="fPg-VP-VkU" firstAttribute="top" secondItem="QYv-QM-Bkk" secondAttribute="top" id="bLC-DU-cJf"/>
  70 + <constraint firstItem="9hM-Gv-AxQ" firstAttribute="leading" secondItem="QYv-QM-Bkk" secondAttribute="leading" id="cUY-dT-Rh0"/>
  71 + <constraint firstAttribute="trailing" secondItem="fPg-VP-VkU" secondAttribute="trailing" id="fn0-SY-e1Z"/>
  72 + <constraint firstAttribute="height" constant="46" id="lBP-32-aFw"/>
  73 + <constraint firstItem="O23-Hy-4Ld" firstAttribute="top" secondItem="QYv-QM-Bkk" secondAttribute="top" constant="5" id="ogR-c4-QQ3"/>
  74 + <constraint firstAttribute="bottom" secondItem="fPg-VP-VkU" secondAttribute="bottom" id="wdr-SH-Wm2"/>
  75 + <constraint firstAttribute="bottom" secondItem="O23-Hy-4Ld" secondAttribute="bottom" constant="5" id="yJ4-81-rJx"/>
  76 + </constraints>
  77 + </view>
  78 + <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aKu-bd-xMP" customClass="TPKeyboardAvoidingScrollView">
  79 + <rect key="frame" x="0.0" y="46" width="320" height="580"/>
  80 + <subviews>
  81 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9w1-87-U1W">
  82 + <rect key="frame" x="0.0" y="0.0" width="320" height="580"/>
  83 + <subviews>
  84 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ๅ็งฐ" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZtU-mt-3Ov" customClass="AutoTransLabel">
  85 + <rect key="frame" x="8" y="10" width="70" height="30"/>
  86 + <constraints>
  87 + <constraint firstAttribute="width" constant="70" id="Zvx-V3-7AW"/>
  88 + <constraint firstAttribute="height" constant="30" id="nok-hA-mW9"/>
  89 + </constraints>
  90 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  91 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  92 + <nil key="highlightedColor"/>
  93 + <userDefinedRuntimeAttributes>
  94 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.name"/>
  95 + </userDefinedRuntimeAttributes>
  96 + </label>
  97 + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="pXO-K0-vne">
  98 + <rect key="frame" x="88" y="10" width="222" height="30"/>
  99 + <constraints>
  100 + <constraint firstAttribute="height" constant="30" id="YJe-TW-hvA"/>
  101 + </constraints>
  102 + <nil key="textColor"/>
  103 + <fontDescription key="fontDescription" type="system" pointSize="14"/>
  104 + <textInputTraits key="textInputTraits"/>
  105 + <connections>
  106 + <outlet property="delegate" destination="-1" id="3NL-Ya-JuM"/>
  107 + </connections>
  108 + </textField>
  109 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ONn-27-HqB">
  110 + <rect key="frame" x="10" y="50" width="140" height="120"/>
  111 + <subviews>
  112 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="S2z-DI-pIE">
  113 + <rect key="frame" x="0.0" y="0.0" width="140" height="40"/>
  114 + <subviews>
  115 + <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3xD-aH-JHl">
  116 + <rect key="frame" x="85" y="4" width="51" height="31"/>
  117 + <constraints>
  118 + <constraint firstAttribute="width" secondItem="3xD-aH-JHl" secondAttribute="height" multiplier="49:31" id="7LJ-H5-oQR"/>
  119 + </constraints>
  120 + <color key="onTintColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  121 + </switch>
  122 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WALK" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yFv-kp-ag8" customClass="AutoTransLabel">
  123 + <rect key="frame" x="6" y="10.5" width="47.5" height="20.5"/>
  124 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  125 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  126 + <nil key="highlightedColor"/>
  127 + <userDefinedRuntimeAttributes>
  128 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.walk"/>
  129 + </userDefinedRuntimeAttributes>
  130 + </label>
  131 + </subviews>
  132 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  133 + <constraints>
  134 + <constraint firstAttribute="trailing" secondItem="3xD-aH-JHl" secondAttribute="trailing" constant="6" id="KNe-Rx-lun"/>
  135 + <constraint firstAttribute="height" constant="40" id="akz-T7-d2v"/>
  136 + <constraint firstItem="3xD-aH-JHl" firstAttribute="centerY" secondItem="S2z-DI-pIE" secondAttribute="centerY" id="oRy-OM-Om1"/>
  137 + <constraint firstItem="yFv-kp-ag8" firstAttribute="leading" secondItem="S2z-DI-pIE" secondAttribute="leading" constant="6" id="prt-UF-Ori"/>
  138 + <constraint firstItem="yFv-kp-ag8" firstAttribute="centerY" secondItem="S2z-DI-pIE" secondAttribute="centerY" id="xEl-Rl-8C1"/>
  139 + </constraints>
  140 + </view>
  141 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dVh-y2-XTr">
  142 + <rect key="frame" x="0.0" y="40" width="140" height="40"/>
  143 + <subviews>
  144 + <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2gX-B2-tkR">
  145 + <rect key="frame" x="85" y="4" width="51" height="31"/>
  146 + <constraints>
  147 + <constraint firstAttribute="width" secondItem="2gX-B2-tkR" secondAttribute="height" multiplier="49:31" id="pBG-Mw-aNK"/>
  148 + </constraints>
  149 + <color key="onTintColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  150 + </switch>
  151 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="RUN" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="r9v-yX-mx8" customClass="AutoTransLabel">
  152 + <rect key="frame" x="6" y="10.5" width="36" height="20.5"/>
  153 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  154 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  155 + <nil key="highlightedColor"/>
  156 + <userDefinedRuntimeAttributes>
  157 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.run"/>
  158 + </userDefinedRuntimeAttributes>
  159 + </label>
  160 + </subviews>
  161 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  162 + <constraints>
  163 + <constraint firstItem="2gX-B2-tkR" firstAttribute="centerY" secondItem="dVh-y2-XTr" secondAttribute="centerY" id="bNR-wC-PQG"/>
  164 + <constraint firstItem="r9v-yX-mx8" firstAttribute="leading" secondItem="dVh-y2-XTr" secondAttribute="leading" constant="6" id="iHM-Q7-Z1Z"/>
  165 + <constraint firstAttribute="height" constant="40" id="s8W-Ak-VrH"/>
  166 + <constraint firstAttribute="trailing" secondItem="2gX-B2-tkR" secondAttribute="trailing" constant="6" id="usV-BG-oqp"/>
  167 + <constraint firstItem="r9v-yX-mx8" firstAttribute="centerY" secondItem="dVh-y2-XTr" secondAttribute="centerY" id="yZW-Wk-raQ"/>
  168 + </constraints>
  169 + </view>
  170 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7PQ-zz-N0X">
  171 + <rect key="frame" x="0.0" y="80" width="140" height="40"/>
  172 + <subviews>
  173 + <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Yga-UQ-xoU">
  174 + <rect key="frame" x="85" y="4" width="51" height="31"/>
  175 + <constraints>
  176 + <constraint firstAttribute="width" secondItem="Yga-UQ-xoU" secondAttribute="height" multiplier="49:31" id="laB-Zs-gOj"/>
  177 + </constraints>
  178 + <color key="onTintColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  179 + </switch>
  180 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ใ‚ธใƒ " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EFD-Ys-PqS" customClass="AutoTransLabel">
  181 + <rect key="frame" x="6" y="10.5" width="35" height="20.5"/>
  182 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  183 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  184 + <nil key="highlightedColor"/>
  185 + <userDefinedRuntimeAttributes>
  186 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.gym"/>
  187 + </userDefinedRuntimeAttributes>
  188 + </label>
  189 + </subviews>
  190 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  191 + <constraints>
  192 + <constraint firstItem="EFD-Ys-PqS" firstAttribute="centerY" secondItem="7PQ-zz-N0X" secondAttribute="centerY" id="Ein-vC-mpy"/>
  193 + <constraint firstAttribute="height" constant="40" id="aKm-hG-Hyh"/>
  194 + <constraint firstAttribute="trailing" secondItem="Yga-UQ-xoU" secondAttribute="trailing" constant="6" id="cfd-4G-1NF"/>
  195 + <constraint firstItem="EFD-Ys-PqS" firstAttribute="leading" secondItem="7PQ-zz-N0X" secondAttribute="leading" constant="6" id="ojT-rz-8oC"/>
  196 + <constraint firstItem="Yga-UQ-xoU" firstAttribute="centerY" secondItem="7PQ-zz-N0X" secondAttribute="centerY" id="xYy-kb-5Sk"/>
  197 + </constraints>
  198 + </view>
  199 + </subviews>
  200 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  201 + <constraints>
  202 + <constraint firstItem="dVh-y2-XTr" firstAttribute="top" secondItem="S2z-DI-pIE" secondAttribute="bottom" id="2LH-28-ssn"/>
  203 + <constraint firstItem="7PQ-zz-N0X" firstAttribute="leading" secondItem="ONn-27-HqB" secondAttribute="leading" id="6md-Y8-lIk"/>
  204 + <constraint firstAttribute="height" constant="120" id="7Tb-oJ-5eC"/>
  205 + <constraint firstItem="7PQ-zz-N0X" firstAttribute="top" secondItem="dVh-y2-XTr" secondAttribute="bottom" id="Fsa-Ai-cKQ"/>
  206 + <constraint firstAttribute="trailing" secondItem="S2z-DI-pIE" secondAttribute="trailing" id="OV6-wK-IJj"/>
  207 + <constraint firstItem="dVh-y2-XTr" firstAttribute="leading" secondItem="ONn-27-HqB" secondAttribute="leading" id="TFE-bH-HwH"/>
  208 + <constraint firstAttribute="trailing" secondItem="dVh-y2-XTr" secondAttribute="trailing" id="Vul-EM-V8H"/>
  209 + <constraint firstItem="S2z-DI-pIE" firstAttribute="top" secondItem="ONn-27-HqB" secondAttribute="top" id="Yf4-Rz-E4g"/>
  210 + <constraint firstAttribute="trailing" secondItem="7PQ-zz-N0X" secondAttribute="trailing" id="hLr-NV-hyv"/>
  211 + <constraint firstItem="S2z-DI-pIE" firstAttribute="leading" secondItem="ONn-27-HqB" secondAttribute="leading" id="zMY-Vd-Ge9"/>
  212 + </constraints>
  213 + </view>
  214 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Kpa-HJ-7cE">
  215 + <rect key="frame" x="170" y="50" width="140" height="120"/>
  216 + <subviews>
  217 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ALk-sL-SXG">
  218 + <rect key="frame" x="0.0" y="0.0" width="140" height="40"/>
  219 + <subviews>
  220 + <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fGW-Vw-PwQ">
  221 + <rect key="frame" x="85" y="4" width="51" height="31"/>
  222 + <constraints>
  223 + <constraint firstAttribute="width" secondItem="fGW-Vw-PwQ" secondAttribute="height" multiplier="49:31" id="qd5-Cg-6pG"/>
  224 + </constraints>
  225 + <color key="onTintColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  226 + </switch>
  227 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="BIKE" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WfE-YM-vVU" customClass="AutoTransLabel">
  228 + <rect key="frame" x="6" y="10.5" width="36.5" height="20.5"/>
  229 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  230 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  231 + <nil key="highlightedColor"/>
  232 + <userDefinedRuntimeAttributes>
  233 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.bike"/>
  234 + </userDefinedRuntimeAttributes>
  235 + </label>
  236 + </subviews>
  237 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  238 + <constraints>
  239 + <constraint firstItem="WfE-YM-vVU" firstAttribute="leading" secondItem="ALk-sL-SXG" secondAttribute="leading" constant="6" id="7xm-U8-L7U"/>
  240 + <constraint firstAttribute="height" constant="40" id="L4u-uj-rHa"/>
  241 + <constraint firstItem="fGW-Vw-PwQ" firstAttribute="centerY" secondItem="ALk-sL-SXG" secondAttribute="centerY" id="PBA-tv-gec"/>
  242 + <constraint firstAttribute="trailing" secondItem="fGW-Vw-PwQ" secondAttribute="trailing" constant="6" id="bHc-Ih-6ar"/>
  243 + <constraint firstItem="WfE-YM-vVU" firstAttribute="centerY" secondItem="ALk-sL-SXG" secondAttribute="centerY" id="te7-Im-Oqh"/>
  244 + </constraints>
  245 + </view>
  246 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Az-6N-8u4">
  247 + <rect key="frame" x="0.0" y="40" width="140" height="40"/>
  248 + <subviews>
  249 + <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RoR-w7-dNT">
  250 + <rect key="frame" x="85" y="4" width="51" height="31"/>
  251 + <constraints>
  252 + <constraint firstAttribute="width" secondItem="RoR-w7-dNT" secondAttribute="height" multiplier="49:31" id="YUz-Eh-EmZ"/>
  253 + </constraints>
  254 + <color key="onTintColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  255 + </switch>
  256 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="STEP" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZyO-6K-2gA" customClass="AutoTransLabel">
  257 + <rect key="frame" x="6" y="10.5" width="42" height="20.5"/>
  258 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  259 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  260 + <nil key="highlightedColor"/>
  261 + <userDefinedRuntimeAttributes>
  262 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.step"/>
  263 + </userDefinedRuntimeAttributes>
  264 + </label>
  265 + </subviews>
  266 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  267 + <constraints>
  268 + <constraint firstAttribute="trailing" secondItem="RoR-w7-dNT" secondAttribute="trailing" constant="6" id="Cc4-W7-Qc8"/>
  269 + <constraint firstItem="ZyO-6K-2gA" firstAttribute="leading" secondItem="4Az-6N-8u4" secondAttribute="leading" constant="6" id="ER7-Bx-w9j"/>
  270 + <constraint firstAttribute="height" constant="40" id="Kcy-ij-IsH"/>
  271 + <constraint firstItem="RoR-w7-dNT" firstAttribute="centerY" secondItem="4Az-6N-8u4" secondAttribute="centerY" id="O1R-k3-iBZ"/>
  272 + <constraint firstItem="ZyO-6K-2gA" firstAttribute="centerY" secondItem="4Az-6N-8u4" secondAttribute="centerY" id="fWH-tG-gSV"/>
  273 + </constraints>
  274 + </view>
  275 + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ORZ-El-owx">
  276 + <rect key="frame" x="0.0" y="80" width="140" height="40"/>
  277 + <subviews>
  278 + <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="e63-8i-6aa">
  279 + <rect key="frame" x="85" y="4" width="51" height="31"/>
  280 + <constraints>
  281 + <constraint firstAttribute="width" secondItem="e63-8i-6aa" secondAttribute="height" multiplier="49:31" id="TTd-tM-PrG"/>
  282 + </constraints>
  283 + <color key="onTintColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  284 + </switch>
  285 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ๅˆๅฟƒ่€…" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RfO-1U-s4W" customClass="AutoTransLabel">
  286 + <rect key="frame" x="6" y="10.5" width="52" height="20.5"/>
  287 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  288 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  289 + <nil key="highlightedColor"/>
  290 + <userDefinedRuntimeAttributes>
  291 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.begin"/>
  292 + </userDefinedRuntimeAttributes>
  293 + </label>
  294 + </subviews>
  295 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  296 + <constraints>
  297 + <constraint firstItem="RfO-1U-s4W" firstAttribute="leading" secondItem="ORZ-El-owx" secondAttribute="leading" constant="6" id="5Vq-B2-215"/>
  298 + <constraint firstAttribute="trailing" secondItem="e63-8i-6aa" secondAttribute="trailing" constant="6" id="NUX-0H-z8v"/>
  299 + <constraint firstAttribute="height" constant="40" id="PdI-3J-BTC"/>
  300 + <constraint firstItem="e63-8i-6aa" firstAttribute="centerY" secondItem="ORZ-El-owx" secondAttribute="centerY" id="Vxw-Vk-POY"/>
  301 + <constraint firstItem="RfO-1U-s4W" firstAttribute="centerY" secondItem="ORZ-El-owx" secondAttribute="centerY" id="tX1-Qb-pKG"/>
  302 + </constraints>
  303 + </view>
  304 + </subviews>
  305 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  306 + <constraints>
  307 + <constraint firstAttribute="height" constant="120" id="1Z3-Ap-Qv1"/>
  308 + <constraint firstAttribute="trailing" secondItem="ALk-sL-SXG" secondAttribute="trailing" id="2DO-V0-pH1"/>
  309 + <constraint firstItem="ORZ-El-owx" firstAttribute="top" secondItem="4Az-6N-8u4" secondAttribute="bottom" id="9ap-NH-2HO"/>
  310 + <constraint firstItem="ALk-sL-SXG" firstAttribute="top" secondItem="Kpa-HJ-7cE" secondAttribute="top" id="Lc0-Xq-rka"/>
  311 + <constraint firstItem="4Az-6N-8u4" firstAttribute="leading" secondItem="Kpa-HJ-7cE" secondAttribute="leading" id="PVG-jU-N5c"/>
  312 + <constraint firstAttribute="trailing" secondItem="ORZ-El-owx" secondAttribute="trailing" id="WYz-Kv-H08"/>
  313 + <constraint firstItem="ORZ-El-owx" firstAttribute="leading" secondItem="Kpa-HJ-7cE" secondAttribute="leading" id="a7E-Je-SkO"/>
  314 + <constraint firstAttribute="bottom" secondItem="ORZ-El-owx" secondAttribute="bottom" id="dr5-Tk-AAg"/>
  315 + <constraint firstAttribute="trailing" secondItem="4Az-6N-8u4" secondAttribute="trailing" id="wOX-wa-25X"/>
  316 + <constraint firstItem="4Az-6N-8u4" firstAttribute="top" secondItem="ALk-sL-SXG" secondAttribute="bottom" id="xgc-3W-TS2"/>
  317 + <constraint firstItem="ALk-sL-SXG" firstAttribute="leading" secondItem="Kpa-HJ-7cE" secondAttribute="leading" id="yrE-eZ-Vg4"/>
  318 + </constraints>
  319 + </view>
  320 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="็›ฎๆจ™" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KTY-Ed-NJL" customClass="AutoTransLabel">
  321 + <rect key="frame" x="10" y="178" width="70" height="30"/>
  322 + <constraints>
  323 + <constraint firstAttribute="width" constant="70" id="Zlu-jK-x6p"/>
  324 + <constraint firstAttribute="height" constant="30" id="tVk-5e-QAY"/>
  325 + </constraints>
  326 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  327 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  328 + <nil key="highlightedColor"/>
  329 + <userDefinedRuntimeAttributes>
  330 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.goal"/>
  331 + </userDefinedRuntimeAttributes>
  332 + </label>
  333 + <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="hWb-vU-yVd">
  334 + <rect key="frame" x="88" y="178" width="222" height="120"/>
  335 + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  336 + <constraints>
  337 + <constraint firstAttribute="height" constant="120" id="iYo-mA-ZGR"/>
  338 + </constraints>
  339 + <fontDescription key="fontDescription" type="system" pointSize="14"/>
  340 + <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
  341 + <userDefinedRuntimeAttributes>
  342 + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
  343 + <integer key="value" value="10"/>
  344 + </userDefinedRuntimeAttribute>
  345 + </userDefinedRuntimeAttributes>
  346 + <connections>
  347 + <outlet property="delegate" destination="-1" id="fVh-oh-7St"/>
  348 + </connections>
  349 + </textView>
  350 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ใƒžใƒƒใƒ—" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qdi-Na-zsj" customClass="AutoTransLabel">
  351 + <rect key="frame" x="10" y="313" width="70" height="30"/>
  352 + <constraints>
  353 + <constraint firstAttribute="height" constant="30" id="Ptf-0N-ewh"/>
  354 + <constraint firstAttribute="width" constant="70" id="mT3-FA-eev"/>
  355 + </constraints>
  356 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  357 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  358 + <nil key="highlightedColor"/>
  359 + <userDefinedRuntimeAttributes>
  360 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.map"/>
  361 + </userDefinedRuntimeAttributes>
  362 + </label>
  363 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="๏ผ‘ๆ—ฅ็›ฎๆจ™" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qfU-7x-uss" customClass="AutoTransLabel">
  364 + <rect key="frame" x="10" y="353" width="300" height="30"/>
  365 + <constraints>
  366 + <constraint firstAttribute="height" constant="30" id="9dB-8p-Wdv"/>
  367 + </constraints>
  368 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  369 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  370 + <nil key="highlightedColor"/>
  371 + <userDefinedRuntimeAttributes>
  372 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.goal1day"/>
  373 + </userDefinedRuntimeAttributes>
  374 + </label>
  375 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KEy-T1-mdK" customClass="AutoTransButton">
  376 + <rect key="frame" x="88" y="313" width="110" height="30"/>
  377 + <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
  378 + <constraints>
  379 + <constraint firstAttribute="height" constant="30" id="MWc-Aj-2JZ"/>
  380 + <constraint firstAttribute="width" constant="110" id="V16-pC-FRv"/>
  381 + </constraints>
  382 + <state key="normal" title="ใƒžใƒƒใƒ—ไฝœๆˆ">
  383 + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  384 + </state>
  385 + <userDefinedRuntimeAttributes>
  386 + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
  387 + <integer key="value" value="5"/>
  388 + </userDefinedRuntimeAttribute>
  389 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.bt.map"/>
  390 + </userDefinedRuntimeAttributes>
  391 + </button>
  392 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="WALK" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3QV-Ov-PmX" customClass="AutoTransLabel">
  393 + <rect key="frame" x="10" y="391" width="70" height="30"/>
  394 + <constraints>
  395 + <constraint firstAttribute="height" constant="30" id="GSj-Tq-AsU"/>
  396 + <constraint firstAttribute="width" constant="70" id="uIv-Ty-eR2"/>
  397 + </constraints>
  398 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  399 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  400 + <nil key="highlightedColor"/>
  401 + <userDefinedRuntimeAttributes>
  402 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.walk"/>
  403 + </userDefinedRuntimeAttributes>
  404 + </label>
  405 + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4JZ-J2-3D9">
  406 + <rect key="frame" x="95" y="391" width="130" height="30"/>
  407 + <constraints>
  408 + <constraint firstAttribute="height" constant="30" id="JaF-D4-zT2"/>
  409 + <constraint firstAttribute="width" constant="130" id="qCj-P5-l4y"/>
  410 + </constraints>
  411 + <nil key="textColor"/>
  412 + <fontDescription key="fontDescription" type="system" pointSize="14"/>
  413 + <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
  414 + </textField>
  415 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="m" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o9b-Am-GTl">
  416 + <rect key="frame" x="240" y="391" width="70" height="30"/>
  417 + <constraints>
  418 + <constraint firstAttribute="width" constant="70" id="MN1-fg-mf1"/>
  419 + <constraint firstAttribute="height" constant="30" id="l7E-J3-Syw"/>
  420 + </constraints>
  421 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  422 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  423 + <nil key="highlightedColor"/>
  424 + <userDefinedRuntimeAttributes>
  425 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.name"/>
  426 + </userDefinedRuntimeAttributes>
  427 + </label>
  428 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="RUN" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bq4-nh-Cxk" customClass="AutoTransLabel">
  429 + <rect key="frame" x="10" y="429" width="70" height="30"/>
  430 + <constraints>
  431 + <constraint firstAttribute="height" constant="30" id="MmK-Nk-eFt"/>
  432 + <constraint firstAttribute="width" constant="70" id="nuP-fj-jk2"/>
  433 + </constraints>
  434 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  435 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  436 + <nil key="highlightedColor"/>
  437 + <userDefinedRuntimeAttributes>
  438 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.run"/>
  439 + </userDefinedRuntimeAttributes>
  440 + </label>
  441 + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3aE-uP-KLS">
  442 + <rect key="frame" x="95" y="429" width="130" height="30"/>
  443 + <constraints>
  444 + <constraint firstAttribute="height" constant="30" id="37e-2c-qka"/>
  445 + <constraint firstAttribute="width" constant="130" id="owG-Ob-QnB"/>
  446 + </constraints>
  447 + <nil key="textColor"/>
  448 + <fontDescription key="fontDescription" type="system" pointSize="14"/>
  449 + <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
  450 + </textField>
  451 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="m" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CGA-Xm-2ll">
  452 + <rect key="frame" x="240" y="429" width="70" height="30"/>
  453 + <constraints>
  454 + <constraint firstAttribute="width" constant="70" id="6cf-Y6-Dwq"/>
  455 + <constraint firstAttribute="height" constant="30" id="dHv-kM-AX2"/>
  456 + </constraints>
  457 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  458 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  459 + <nil key="highlightedColor"/>
  460 + <userDefinedRuntimeAttributes>
  461 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.name"/>
  462 + </userDefinedRuntimeAttributes>
  463 + </label>
  464 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="BIKE" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mvZ-9L-7a8" customClass="AutoTransLabel">
  465 + <rect key="frame" x="10" y="467" width="70" height="30"/>
  466 + <constraints>
  467 + <constraint firstAttribute="height" constant="30" id="hX2-SJ-SMG"/>
  468 + <constraint firstAttribute="width" constant="70" id="roN-jL-tXp"/>
  469 + </constraints>
  470 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  471 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  472 + <nil key="highlightedColor"/>
  473 + <userDefinedRuntimeAttributes>
  474 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.bike"/>
  475 + </userDefinedRuntimeAttributes>
  476 + </label>
  477 + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="eOi-eo-GYn">
  478 + <rect key="frame" x="95" y="467" width="130" height="30"/>
  479 + <constraints>
  480 + <constraint firstAttribute="width" constant="130" id="SBb-jw-NHP"/>
  481 + <constraint firstAttribute="height" constant="30" id="ida-Ih-wRM"/>
  482 + </constraints>
  483 + <nil key="textColor"/>
  484 + <fontDescription key="fontDescription" type="system" pointSize="14"/>
  485 + <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
  486 + </textField>
  487 + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="m" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t6i-sV-ycx">
  488 + <rect key="frame" x="240" y="467" width="70" height="30"/>
  489 + <constraints>
  490 + <constraint firstAttribute="width" constant="70" id="DoG-hb-QbI"/>
  491 + <constraint firstAttribute="height" constant="30" id="pAs-GK-YE3"/>
  492 + </constraints>
  493 + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
  494 + <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  495 + <nil key="highlightedColor"/>
  496 + <userDefinedRuntimeAttributes>
  497 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.lbl.name"/>
  498 + </userDefinedRuntimeAttributes>
  499 + </label>
  500 + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sef-8T-0hQ" customClass="AutoTransButton">
  501 + <rect key="frame" x="10" y="509" width="300" height="30"/>
  502 + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
  503 + <constraints>
  504 + <constraint firstAttribute="height" constant="30" id="8XP-Y1-hlJ"/>
  505 + </constraints>
  506 + <state key="normal" title="ใ‚ฐใƒซใƒผใƒ—ใ‚’ไฝœๆˆใ™ใ‚‹">
  507 + <color key="titleColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
  508 + </state>
  509 + <userDefinedRuntimeAttributes>
  510 + <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
  511 + <integer key="value" value="5"/>
  512 + </userDefinedRuntimeAttribute>
  513 + <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.createGr.bt.createGr"/>
  514 + </userDefinedRuntimeAttributes>
  515 + <connections>
  516 + <action selector="clickCreateGroup:" destination="-1" eventType="touchUpInside" id="n8x-KR-til"/>
  517 + </connections>
  518 + </button>
  519 + </subviews>
  520 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  521 + <constraints>
  522 + <constraint firstItem="KTY-Ed-NJL" firstAttribute="leading" secondItem="9w1-87-U1W" secondAttribute="leading" constant="10" id="08M-tc-J6o"/>
  523 + <constraint firstItem="3QV-Ov-PmX" firstAttribute="leading" secondItem="qfU-7x-uss" secondAttribute="leading" id="1CN-mt-xv7"/>
  524 + <constraint firstItem="3aE-uP-KLS" firstAttribute="top" secondItem="bq4-nh-Cxk" secondAttribute="top" id="1YH-oa-gPy"/>
  525 + <constraint firstAttribute="trailing" secondItem="qfU-7x-uss" secondAttribute="trailing" constant="10" id="1fh-fC-Tvd"/>
  526 + <constraint firstItem="t6i-sV-ycx" firstAttribute="leading" secondItem="eOi-eo-GYn" secondAttribute="trailing" constant="15" id="2d5-8C-v4q"/>
  527 + <constraint firstItem="4JZ-J2-3D9" firstAttribute="top" secondItem="3QV-Ov-PmX" secondAttribute="top" id="2rO-Pd-t8O"/>
  528 + <constraint firstItem="t6i-sV-ycx" firstAttribute="top" secondItem="mvZ-9L-7a8" secondAttribute="top" id="4rc-co-XRr"/>
  529 + <constraint firstAttribute="trailing" secondItem="sef-8T-0hQ" secondAttribute="trailing" constant="10" id="89W-o8-uLa"/>
  530 + <constraint firstItem="qdi-Na-zsj" firstAttribute="leading" secondItem="9w1-87-U1W" secondAttribute="leading" constant="10" id="8Cr-Gt-ts7"/>
  531 + <constraint firstItem="ZtU-mt-3Ov" firstAttribute="leading" secondItem="9w1-87-U1W" secondAttribute="leading" constant="8" id="8QA-ZH-zig"/>
  532 + <constraint firstItem="KTY-Ed-NJL" firstAttribute="top" secondItem="ONn-27-HqB" secondAttribute="bottom" constant="8" id="8cI-hb-3IU"/>
  533 + <constraint firstItem="CGA-Xm-2ll" firstAttribute="leading" secondItem="3aE-uP-KLS" secondAttribute="trailing" constant="15" id="AJD-KP-oLm"/>
  534 + <constraint firstItem="qfU-7x-uss" firstAttribute="leading" secondItem="9w1-87-U1W" secondAttribute="leading" constant="10" id="Akh-2h-Y5Z"/>
  535 + <constraint firstItem="mvZ-9L-7a8" firstAttribute="leading" secondItem="qfU-7x-uss" secondAttribute="leading" id="CyJ-DC-cmk"/>
  536 + <constraint firstAttribute="trailing" secondItem="hWb-vU-yVd" secondAttribute="trailing" constant="10" id="Gpv-Cf-wmA"/>
  537 + <constraint firstItem="ONn-27-HqB" firstAttribute="leading" secondItem="9w1-87-U1W" secondAttribute="leading" constant="10" id="GqQ-jG-2Ss"/>
  538 + <constraint firstItem="Kpa-HJ-7cE" firstAttribute="top" secondItem="ONn-27-HqB" secondAttribute="top" id="I8B-QJ-8Kw"/>
  539 + <constraint firstItem="ONn-27-HqB" firstAttribute="top" secondItem="pXO-K0-vne" secondAttribute="bottom" constant="10" id="IUV-iX-zqx"/>
  540 + <constraint firstItem="pXO-K0-vne" firstAttribute="leading" secondItem="ZtU-mt-3Ov" secondAttribute="trailing" constant="10" id="JQi-T2-HRB"/>
  541 + <constraint firstItem="o9b-Am-GTl" firstAttribute="top" secondItem="3QV-Ov-PmX" secondAttribute="top" id="Osm-tS-nSE"/>
  542 + <constraint firstItem="sef-8T-0hQ" firstAttribute="top" secondItem="t6i-sV-ycx" secondAttribute="bottom" constant="12" id="PNY-xc-4go"/>
  543 + <constraint firstItem="3aE-uP-KLS" firstAttribute="leading" secondItem="bq4-nh-Cxk" secondAttribute="trailing" constant="15" id="QhW-Vx-RNc"/>
  544 + <constraint firstItem="mvZ-9L-7a8" firstAttribute="top" secondItem="bq4-nh-Cxk" secondAttribute="bottom" constant="8" id="Qu7-jT-zZM"/>
  545 + <constraint firstItem="qdi-Na-zsj" firstAttribute="top" secondItem="KTY-Ed-NJL" secondAttribute="bottom" constant="105" id="Rbx-GC-D0X"/>
  546 + <constraint firstItem="eOi-eo-GYn" firstAttribute="leading" secondItem="mvZ-9L-7a8" secondAttribute="trailing" constant="15" id="Rcg-h2-Qfa"/>
  547 + <constraint firstItem="pXO-K0-vne" firstAttribute="top" secondItem="ZtU-mt-3Ov" secondAttribute="top" id="T8M-OQ-0Wk"/>
  548 + <constraint firstItem="o9b-Am-GTl" firstAttribute="leading" secondItem="4JZ-J2-3D9" secondAttribute="trailing" constant="15" id="UyE-qx-Mtp"/>
  549 + <constraint firstItem="4JZ-J2-3D9" firstAttribute="top" secondItem="3QV-Ov-PmX" secondAttribute="top" id="aRK-i9-XKN"/>
  550 + <constraint firstItem="hWb-vU-yVd" firstAttribute="top" secondItem="Kpa-HJ-7cE" secondAttribute="bottom" constant="8" id="chw-2w-QOv"/>
  551 + <constraint firstItem="sef-8T-0hQ" firstAttribute="leading" secondItem="9w1-87-U1W" secondAttribute="leading" constant="10" id="dfN-4U-9Oc"/>
  552 + <constraint firstItem="eOi-eo-GYn" firstAttribute="top" secondItem="mvZ-9L-7a8" secondAttribute="top" id="e8C-p7-obk"/>
  553 + <constraint firstItem="bq4-nh-Cxk" firstAttribute="top" secondItem="3QV-Ov-PmX" secondAttribute="bottom" constant="8" id="gjA-dw-4j6"/>
  554 + <constraint firstItem="4JZ-J2-3D9" firstAttribute="leading" secondItem="3QV-Ov-PmX" secondAttribute="trailing" constant="15" id="hCs-KK-0oG"/>
  555 + <constraint firstItem="Kpa-HJ-7cE" firstAttribute="width" secondItem="ONn-27-HqB" secondAttribute="width" id="i0I-s6-95a"/>
  556 + <constraint firstAttribute="trailing" secondItem="pXO-K0-vne" secondAttribute="trailing" constant="10" id="j2H-Na-egE"/>
  557 + <constraint firstItem="bq4-nh-Cxk" firstAttribute="leading" secondItem="qfU-7x-uss" secondAttribute="leading" id="kTU-cF-wdS"/>
  558 + <constraint firstItem="hWb-vU-yVd" firstAttribute="leading" secondItem="KTY-Ed-NJL" secondAttribute="trailing" constant="8" id="ka5-tK-yxs"/>
  559 + <constraint firstItem="eOi-eo-GYn" firstAttribute="top" secondItem="mvZ-9L-7a8" secondAttribute="top" id="klA-2z-2Kx"/>
  560 + <constraint firstItem="3aE-uP-KLS" firstAttribute="top" secondItem="bq4-nh-Cxk" secondAttribute="top" id="pdY-Ef-eHr"/>
  561 + <constraint firstItem="3QV-Ov-PmX" firstAttribute="top" secondItem="qfU-7x-uss" secondAttribute="bottom" constant="8" id="qLb-a1-eOB"/>
  562 + <constraint firstItem="Kpa-HJ-7cE" firstAttribute="leading" secondItem="ONn-27-HqB" secondAttribute="trailing" constant="20" id="rMt-rx-zDY"/>
  563 + <constraint firstItem="KEy-T1-mdK" firstAttribute="top" secondItem="hWb-vU-yVd" secondAttribute="bottom" constant="15" id="sIJ-Rk-gj3"/>
  564 + <constraint firstItem="ZtU-mt-3Ov" firstAttribute="top" secondItem="9w1-87-U1W" secondAttribute="top" constant="10" id="tBp-C6-fjS"/>
  565 + <constraint firstItem="CGA-Xm-2ll" firstAttribute="top" secondItem="bq4-nh-Cxk" secondAttribute="top" id="uaB-yp-z16"/>
  566 + <constraint firstItem="qfU-7x-uss" firstAttribute="top" secondItem="KEy-T1-mdK" secondAttribute="bottom" constant="10" id="w4X-lJ-yL1"/>
  567 + <constraint firstAttribute="trailing" secondItem="Kpa-HJ-7cE" secondAttribute="trailing" constant="10" id="wvh-Lk-tt9"/>
  568 + <constraint firstItem="KEy-T1-mdK" firstAttribute="leading" secondItem="qdi-Na-zsj" secondAttribute="trailing" constant="8" id="xGa-CF-V9a"/>
  569 + </constraints>
  570 + </view>
  571 + </subviews>
  572 + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
  573 + <constraints>
  574 + <constraint firstItem="9w1-87-U1W" firstAttribute="leading" secondItem="aKu-bd-xMP" secondAttribute="leading" id="BLm-dD-oN3"/>
  575 + <constraint firstItem="9w1-87-U1W" firstAttribute="centerY" secondItem="aKu-bd-xMP" secondAttribute="centerY" id="DT9-CK-3ZL"/>
  576 + <constraint firstItem="9w1-87-U1W" firstAttribute="top" secondItem="aKu-bd-xMP" secondAttribute="top" id="PZC-BJ-DLV"/>
  577 + <constraint firstAttribute="trailing" secondItem="9w1-87-U1W" secondAttribute="trailing" id="RDM-mt-Fjr"/>
  578 + <constraint firstAttribute="bottom" secondItem="9w1-87-U1W" secondAttribute="bottom" id="w42-vd-D7e"/>
  579 + <constraint firstItem="9w1-87-U1W" firstAttribute="centerX" secondItem="aKu-bd-xMP" secondAttribute="centerX" id="wJD-gn-ctq"/>
  580 + </constraints>
  581 + </scrollView>
  582 + </subviews>
  583 + <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
  584 + <constraints>
  585 + <constraint firstItem="aKu-bd-xMP" firstAttribute="top" secondItem="QYv-QM-Bkk" secondAttribute="bottom" id="Q7l-Ra-0wb"/>
  586 + <constraint firstAttribute="trailing" secondItem="aKu-bd-xMP" secondAttribute="trailing" id="WAl-wE-FB4"/>
  587 + <constraint firstAttribute="trailing" secondItem="QYv-QM-Bkk" secondAttribute="trailing" id="XdX-OA-ALX"/>
  588 + <constraint firstItem="aKu-bd-xMP" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="cE7-y5-LL4"/>
  589 + <constraint firstItem="QYv-QM-Bkk" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="dAn-YE-2s3"/>
  590 + <constraint firstItem="QYv-QM-Bkk" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="fFF-bj-0uk"/>
  591 + <constraint firstAttribute="bottom" secondItem="aKu-bd-xMP" secondAttribute="bottom" id="oPE-ST-BIo"/>
  592 + </constraints>
  593 + <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
  594 + <point key="canvasLocation" x="26" y="125"/>
  595 + </view>
  596 + </objects>
  597 + <resources>
  598 + <image name="icon_menu" width="30" height="30"/>
  599 + <image name="today_back_button" width="73" height="37"/>
  600 + </resources>
  601 +</document>
LifeLog/LifeLog/GroupObject.m
... ... @@ -17,7 +17,7 @@
17 17 if([dict objectForKey:@"group_avatar"] != nil) {
18 18 self.avatar = dict[@"group_avatar"];
19 19 }
20   - if([dict objectForKey:@"created_at"] != nil) {
  20 + if([dict objectForKey:@"created_at"] != nil && ![[dict objectForKey:@"created_at"] isKindOfClass:[NSNull class]]) {
21 21 NSString *dateString = dict[@"created_at"];
22 22 self.createDate = [Utilities dateFromString:dateString withFormat:@"yyyy-MM-dd hh:mm:ss"];
23 23 }
LifeLog/LifeLog/Localizable.strings
No preview for this file type
LifeLog/LifeLog/SearchGroupViewController.h
... ... @@ -9,7 +9,9 @@
9 9 #import <UIKit/UIKit.h>
10 10 #import "BaseTableViewController.h"
11 11  
12   -@interface SearchGroupViewController : BaseTableViewController<UITextFieldDelegate>
  12 +@interface SearchGroupViewController : BaseTableViewController<UITextFieldDelegate> {
  13 + NSTimer *timerSearch;
  14 +}
13 15  
14 16 @property (weak, nonatomic) IBOutlet UITextField *textFieldSearch;
15 17  
LifeLog/LifeLog/SearchGroupViewController.m
... ... @@ -14,6 +14,7 @@
14 14 #import "Utilities.h"
15 15  
16 16 #import "SearchGroupTableViewCell.h"
  17 +#import "CreateGroupViewController.h"
17 18 #import "GroupDetailViewController.h"
18 19  
19 20 @interface SearchGroupViewController ()
20 21  
... ... @@ -42,11 +43,18 @@
42 43 }
43 44  
44 45 - (IBAction)clickSearch:(id)sender {
  46 + [self.view endEditing:true];
45 47 [self resetData];
46 48 }
47 49  
48 50 - (IBAction)clickCreateGroup:(id)sender {
49   -
  51 + CreateGroupViewController * create = [[CreateGroupViewController alloc] init];
  52 + create.createGroupSuccess = ^(GroupObject *object){
  53 + GroupDetailViewController * detail = [[GroupDetailViewController alloc] init];
  54 + [detail setGroup:object];
  55 + [self.navigationController pushViewController:detail animated:true];
  56 + };
  57 + [self.navigationController pushViewController:create animated:true];
50 58 }
51 59  
52 60 #pragma mark UITableView Delegate
53 61  
... ... @@ -74,8 +82,16 @@
74 82 }
75 83  
76 84 #pragma mark UITextField Delegate
  85 +-(BOOL) textFieldShouldReturn:(UITextField *)textField {
  86 + [self.view endEditing:true];
  87 + return true;
  88 +}
  89 +
77 90 -(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
78   - [self resetData];
  91 + if(timerSearch != nil) {
  92 + [timerSearch invalidate];
  93 + }
  94 + timerSearch = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(resetData) userInfo:nil repeats:false];
79 95 return true;
80 96 }
81 97  
LifeLog/LifeLog/SearchGroupViewController.xib
... ... @@ -112,7 +112,7 @@
112 112 <userDefinedRuntimeAttribute type="string" keyPath="localizeKey" value="lifelog.searchGr.bt.createGr"/>
113 113 </userDefinedRuntimeAttributes>
114 114 <connections>
115   - <action selector="clickCreateGroup:" destination="-1" eventType="touchUpOutside" id="iYI-HB-mhb"/>
  115 + <action selector="clickCreateGroup:" destination="-1" eventType="touchUpInside" id="J9P-5a-SrT"/>
116 116 </connections>
117 117 </button>
118 118 <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" rowHeight="70" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="yF3-ZN-ebL">
LifeLog/LifeLog/ServerAPI.h
... ... @@ -34,6 +34,7 @@
34 34 - (void) requestHistoryGraph:(NSString *)token withType:(int)type andMode:(int) mode CompletionHandler:(void (^)(HistoryGraphObject *, NSError *)) completion;
35 35 - (void) requestHistoryList:(NSString *)token withType:(int)type andMode:(int) mode AtPage:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion;
36 36 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion;
  37 +-(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion;
37 38  
38 39 #pragma mark - SNS Screen Function
39 40 /*
LifeLog/LifeLog/ServerAPI.m
... ... @@ -647,6 +647,67 @@
647 647 }
648 648  
649 649 #pragma mark - Group Function
  650 +-(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion {
  651 + NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/newGroup"];
  652 + NSLog(@"requestCreateGroup link %@", url);
  653 + NSDictionary * dict = @{@"group_name":group.name,
  654 + @"goal":group.goal,
  655 + @"walk_mode_active":[NSNumber numberWithBool:group.walkMode],
  656 + @"run_mode_active":[NSNumber numberWithBool:group.runMode],
  657 + @"bike_mode_active":[NSNumber numberWithBool:group.bikeMode],
  658 + @"step_mode_active":[NSNumber numberWithBool:group.stepMode],
  659 + @"gym_mode_active":[NSNumber numberWithBool:group.gymMode],
  660 + @"beginer_mode_active":[NSNumber numberWithBool:group.beginMode],
  661 + @"walk_mode_goal":[NSNumber numberWithBool:group.walkGoal],
  662 + @"run_mode_goal":[NSNumber numberWithBool:group.runGoal],
  663 + @"bike_mode_goal":[NSNumber numberWithBool:group.bikeGoal]};
  664 +
  665 + [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
  666 +
  667 + if (completion == NULL) {
  668 + return ;
  669 + }
  670 +
  671 + if (error == nil)
  672 + {
  673 + NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
  674 + NSLog(@"%@", dataResult);
  675 + int status = [dataResult[@"status"] intValue];
  676 + if (status == 1) { // status = 1 success
  677 + if(dataResult[@"result"] != nil) {
  678 + NSDictionary * dict = dataResult[@"result"];
  679 + group.groupID = [dict[@"group_id"] intValue];
  680 + completion(group, nil);
  681 + }
  682 + else {
  683 + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
  684 + completion(nil, errorObject);
  685 + }
  686 + }
  687 + else {
  688 + NSString *message = dataResult[@"message"];
  689 + if (message == nil) {
  690 + message = @"Unknown error";
  691 + }
  692 +
  693 + if ([message isEqualToString:@"Token is invalid"]) {
  694 + [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
  695 + NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
  696 + [self requestCreateGroup:tokenNew withGroup:group CompletionHandler:completion];
  697 + }
  698 + else {
  699 + NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
  700 + completion(nil, errorObject);
  701 + }
  702 + }
  703 + }
  704 + else
  705 + {
  706 + completion(nil, error);
  707 + }
  708 + }];
  709 +}
  710 +
650 711 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion {
651 712 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/detail/%d", groupID];
652 713 NSLog(@"getGroupDetail link %@", url);