From 1204021c3222a196677ed2036f43b4e4be6de804 Mon Sep 17 00:00:00 2001 From: rachytski Date: Sun, 3 Apr 2011 22:17:50 +0300 Subject: [PATCH] added animation of "my position" button, when updating to first "fresh" position. --- iphone/Maps/Classes/MapViewController.h | 11 ++-- iphone/Maps/Classes/MapViewController.mm | 62 +++++++++++++++++---- iphone/Maps/Maps.xcodeproj/project.pbxproj | 40 +++++++++++++ iphone/Maps/location-0.png | Bin 0 -> 292 bytes iphone/Maps/location-0@2x.png | Bin 0 -> 467 bytes iphone/Maps/location-1.png | Bin 0 -> 326 bytes iphone/Maps/location-1@2x.png | Bin 0 -> 482 bytes iphone/Maps/location-2.png | Bin 0 -> 319 bytes iphone/Maps/location-2@2x.png | Bin 0 -> 485 bytes iphone/Maps/location-3.png | Bin 0 -> 293 bytes iphone/Maps/location-3@2x.png | Bin 0 -> 422 bytes iphone/Maps/location-4.png | Bin 0 -> 284 bytes iphone/Maps/location-4@2x.png | Bin 0 -> 388 bytes 13 files changed, 99 insertions(+), 14 deletions(-) create mode 100644 iphone/Maps/location-0.png create mode 100644 iphone/Maps/location-0@2x.png create mode 100644 iphone/Maps/location-1.png create mode 100644 iphone/Maps/location-1@2x.png create mode 100644 iphone/Maps/location-2.png create mode 100644 iphone/Maps/location-2@2x.png create mode 100644 iphone/Maps/location-3.png create mode 100644 iphone/Maps/location-3@2x.png create mode 100644 iphone/Maps/location-4.png create mode 100644 iphone/Maps/location-4@2x.png diff --git a/iphone/Maps/Classes/MapViewController.h b/iphone/Maps/Classes/MapViewController.h index 201ced8f21..7203539d69 100644 --- a/iphone/Maps/Classes/MapViewController.h +++ b/iphone/Maps/Classes/MapViewController.h @@ -23,6 +23,7 @@ bool m_isDirtyPosition; bool m_isSticking; size_t m_StickyThreshold; + int m_iconSequenceNumber; m2::PointD m_Pt1, m_Pt2; @@ -31,10 +32,11 @@ - (id) initWithCoder: (NSCoder *)coder; -- (void) OnUpdateLocation: (m2::PointD const &) mercatorPoint - withErrorRadius: (double) errorRadius - withLocTimeStamp: (double) locTimeStamp - withCurTimeStamp: (double) curTimeStamp; +- (void) UpdateIcon: (NSTimer *)theTimer; +- (void) OnUpdateLocation: (m2::PointD const &) mercatorPoint + withErrorRadius: (double) errorRadius + withLocTimeStamp: (double) locTimeStamp + withCurTimeStamp: (double) curTimeStamp; - (void) OnChangeLocatorMode: (Locator::EMode) oldMode withNewMode: (Locator::EMode) newMode; @@ -54,5 +56,6 @@ - (IBAction)OnGuideClicked:(id)sender; @property (nonatomic, retain) IBOutlet UIBarButtonItem * m_myPositionButton; +@property (nonatomic, retain) NSTimer * m_iconTimer; @end diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index 6c098be379..c0b3485398 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -18,14 +18,36 @@ typedef FrameWork framework_t; @implementation MapViewController @synthesize m_myPositionButton; +@synthesize m_iconTimer; // Make m_framework and m_storage MapsAppDelegate properties instead of global variables. framework_t * m_framework = NULL; shared_ptr m_locator; storage::Storage m_storage; -- (IBAction)OnMyPositionClicked:(id)sender +- (void)UpdateIcon:(NSTimer *)theTimer { + MapViewController * controller = (MapViewController*)self; + controller->m_iconSequenceNumber = (controller->m_iconSequenceNumber + 1) % 8; + + int iconNum = controller->m_iconSequenceNumber; + if (iconNum > 4) + iconNum = 8 - iconNum; + + NSString * iconName = [[NSString alloc] initWithFormat:@"location-%d.png", iconNum]; + + UIImage * image = [UIImage imageNamed:iconName]; + + self.m_myPositionButton.image = image; + +// [image release]; + [iconName release]; +} + +- (IBAction)OnMyPositionClicked:(id)sender +{ + MapViewController * controller = (MapViewController*)self; + if (m_locator->mode() == Locator::EPreciseMode) { m_locator->setMode(Locator::ERoughMode); @@ -37,12 +59,13 @@ typedef FrameWork framework_t; m_isDirtyPosition = true; ((UIBarButtonItem *)sender).style = UIBarButtonItemStyleDone; - /// TODO : change button icon to progress indicator - - //UIActivityIndicatorView * indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleGray]; - - //((UIBarButtonItem *)sender).customView = indicator; - //[indicator release]; + + controller->m_iconSequenceNumber = 0; + self.m_iconTimer = [NSTimer scheduledTimerWithTimeInterval:0.1f + target:self + selector:@selector(UpdateIcon:) + userInfo:nil + repeats:YES]; } } @@ -51,8 +74,18 @@ typedef FrameWork framework_t; { if (newMode == Locator::ERoughMode) { - /// TODO : change button icon to "rough mode"(UIBarButtonItemStyleBordered); + if (self.m_iconTimer != nil) + { + [self.m_iconTimer invalidate]; + self.m_iconTimer = nil; + } + + UIImage * image = [UIImage imageNamed:@"location-0.png"]; + + m_myPositionButton.image = image; m_myPositionButton.style = UIBarButtonItemStyleBordered; + +// [image release]; } } @@ -63,8 +96,17 @@ typedef FrameWork framework_t; { if (m_isDirtyPosition) { - /// TODO : change button icon to "precise" mode(UIBarButtonItemStyleDone). + if (self.m_iconTimer != nil) + { + [self.m_iconTimer invalidate]; + self.m_iconTimer = nil; + } + + UIImage * image = [UIImage imageNamed:@"location-0.png"]; + m_myPositionButton.image = image; m_myPositionButton.style = UIBarButtonItemStyleDone; + +// [image release]; } } @@ -111,7 +153,7 @@ typedef FrameWork framework_t; shared_ptr resourceManager = [(EAGLView*)self.view resourceManager]; m_locator = shared_ptr(new iphone::Locator()); - + // tricky boost::bind for objC class methods typedef void (*TUpdateLocationFunc)(id, SEL, m2::PointD const &, double, double, double); SEL updateLocationSel = @selector(OnUpdateLocation:withErrorRadius:withLocTimeStamp:withCurTimeStamp:); diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index e798b240b1..959e684590 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -40,6 +40,16 @@ EE12020F11CD464100ABDD5D /* libindexer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EE12020511CD464100ABDD5D /* libindexer.a */; }; EE12021011CD464100ABDD5D /* libmap.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EE12020611CD464100ABDD5D /* libmap.a */; }; EE12021211CD464100ABDD5D /* libyg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EE12020811CD464100ABDD5D /* libyg.a */; }; + EE180DD21348EDED007F727D /* location-0.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DC81348EDED007F727D /* location-0.png */; }; + EE180DD31348EDED007F727D /* location-0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DC91348EDED007F727D /* location-0@2x.png */; }; + EE180DD41348EDED007F727D /* location-1.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DCA1348EDED007F727D /* location-1.png */; }; + EE180DD51348EDED007F727D /* location-1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DCB1348EDED007F727D /* location-1@2x.png */; }; + EE180DD61348EDED007F727D /* location-2.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DCC1348EDED007F727D /* location-2.png */; }; + EE180DD71348EDED007F727D /* location-2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DCD1348EDED007F727D /* location-2@2x.png */; }; + EE180DD81348EDED007F727D /* location-3.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DCE1348EDED007F727D /* location-3.png */; }; + EE180DD91348EDED007F727D /* location-3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DCF1348EDED007F727D /* location-3@2x.png */; }; + EE180DDA1348EDED007F727D /* location-4.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DD01348EDED007F727D /* location-4.png */; }; + EE180DDB1348EDED007F727D /* location-4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EE180DD11348EDED007F727D /* location-4@2x.png */; }; EE583CBB12F773F00042CBE3 /* unicode_blocks.txt in Resources */ = {isa = PBXBuildFile; fileRef = EE583CBA12F773F00042CBE3 /* unicode_blocks.txt */; }; EE7F29811219ECA300EB67A9 /* RenderBuffer.mm in Sources */ = {isa = PBXBuildFile; fileRef = EE7F297D1219ECA300EB67A9 /* RenderBuffer.mm */; }; EE7F29821219ECA300EB67A9 /* RenderContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = EE7F297E1219ECA300EB67A9 /* RenderContext.mm */; }; @@ -147,6 +157,16 @@ EE12020611CD464100ABDD5D /* libmap.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libmap.a; sourceTree = SOURCE_ROOT; }; EE12020811CD464100ABDD5D /* libyg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libyg.a; sourceTree = SOURCE_ROOT; }; EE16192B126E374500622BD0 /* RenderContext.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = RenderContext.hpp; path = Classes/RenderContext.hpp; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; + EE180DC81348EDED007F727D /* location-0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-0.png"; sourceTree = ""; }; + EE180DC91348EDED007F727D /* location-0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-0@2x.png"; sourceTree = ""; }; + EE180DCA1348EDED007F727D /* location-1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-1.png"; sourceTree = ""; }; + EE180DCB1348EDED007F727D /* location-1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-1@2x.png"; sourceTree = ""; }; + EE180DCC1348EDED007F727D /* location-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-2.png"; sourceTree = ""; }; + EE180DCD1348EDED007F727D /* location-2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-2@2x.png"; sourceTree = ""; }; + EE180DCE1348EDED007F727D /* location-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-3.png"; sourceTree = ""; }; + EE180DCF1348EDED007F727D /* location-3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-3@2x.png"; sourceTree = ""; }; + EE180DD01348EDED007F727D /* location-4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-4.png"; sourceTree = ""; }; + EE180DD11348EDED007F727D /* location-4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "location-4@2x.png"; sourceTree = ""; }; EE583CBA12F773F00042CBE3 /* unicode_blocks.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = unicode_blocks.txt; path = ../../data/unicode_blocks.txt; sourceTree = ""; }; EE7F297C1219ECA300EB67A9 /* RenderBuffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = RenderBuffer.hpp; path = Classes/RenderBuffer.hpp; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; EE7F297D1219ECA300EB67A9 /* RenderBuffer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; name = RenderBuffer.mm; path = Classes/RenderBuffer.mm; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; @@ -309,6 +329,16 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = ( + EE180DC81348EDED007F727D /* location-0.png */, + EE180DC91348EDED007F727D /* location-0@2x.png */, + EE180DCA1348EDED007F727D /* location-1.png */, + EE180DCB1348EDED007F727D /* location-1@2x.png */, + EE180DCC1348EDED007F727D /* location-2.png */, + EE180DCD1348EDED007F727D /* location-2@2x.png */, + EE180DCE1348EDED007F727D /* location-3.png */, + EE180DCF1348EDED007F727D /* location-3@2x.png */, + EE180DD01348EDED007F727D /* location-4.png */, + EE180DD11348EDED007F727D /* location-4@2x.png */, 4945D21A1334187D0082387C /* settings.png */, 4945D21B1334187D0082387C /* settings@2x.png */, 49B3FB8B132FA43E00057053 /* location.png */, @@ -582,6 +612,16 @@ 4938BB1D1343652600E0815A /* dictionary.slf in Resources */, 4983AE11134631F600C82DB7 /* GuideView-iPad.xib in Resources */, FAFF422A1347F101009BBB14 /* World.mwm in Resources */, + EE180DD21348EDED007F727D /* location-0.png in Resources */, + EE180DD31348EDED007F727D /* location-0@2x.png in Resources */, + EE180DD41348EDED007F727D /* location-1.png in Resources */, + EE180DD51348EDED007F727D /* location-1@2x.png in Resources */, + EE180DD61348EDED007F727D /* location-2.png in Resources */, + EE180DD71348EDED007F727D /* location-2@2x.png in Resources */, + EE180DD81348EDED007F727D /* location-3.png in Resources */, + EE180DD91348EDED007F727D /* location-3@2x.png in Resources */, + EE180DDA1348EDED007F727D /* location-4.png in Resources */, + EE180DDB1348EDED007F727D /* location-4@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/iphone/Maps/location-0.png b/iphone/Maps/location-0.png new file mode 100644 index 0000000000000000000000000000000000000000..dd994564a806e44eb16c111bedc120327ba328a1 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zu-k$#?nxXd(ar literal 0 HcmV?d00001 diff --git a/iphone/Maps/location-0@2x.png b/iphone/Maps/location-0@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ce332ee4f9a8b432d33e48b098d3dfde5140934d GIT binary patch literal 467 zcmV;^0WAKBP)UqK~z|U#gfZP#6S>5PsRBKVLrvRPegPrZbi{A^0CoDmo60F zYr)Yt3jT%vpm1F{4JMOGI+^ZCL6Hur>T@o{B+*8h**vhBv;bZ(vrFI+_(alF8dwCb zfNwy+2arqyyp#jG-j_sd@O1%Lz&nsc5dfA;z?t+x1%MUcrUEQr;L-;Xr~!7pm)V~H zyb9db0FR_^B=8UXQv>XJcjUer;5Fc`A-FKTmp}lp>z%^;E5P>wzyjU?^AZ5o1A-9P=H#LlR7cWR z$pxilX5EUBqcS-BrHNH3a8flCQ{b>FeN2H@;M8X@mVj6KSOPCV&v!V6fOq;B0)0u| z>0<~S)LjTE(3f=9ra`1&$|K{sk5*s?Mw}p&I}I002ov JPDHLkV1hc=y|e%T literal 0 HcmV?d00001 diff --git a/iphone/Maps/location-1.png b/iphone/Maps/location-1.png new file mode 100644 index 0000000000000000000000000000000000000000..57825fc804114fa02c5111f8bc05cbe12c342ec5 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zuor+ZBi{tC89+hF64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1SJd%8G= zSoAKPyp#8kgNVz03E?27wF-S5P77o@Is`%sJX}(iv;?qkOyt<0JE4DT;?nswZ_h|) zmZi?F_xsZAamnG5SJ0hP4wnKhiCHj;-{#!b%-qu;`+Cj{#)DZGx!De|ScGtJf4RdjgXwsK!Q$id*_c?qH1fTVQdaQ$E?B@;l_^+!`}O)P zDU*Wri*DzAoiJ_NDDAZKbEfkpUuJR6ndf=GN#@8lWmctBdKm(e)+HTFT9~SUq`IUQ za0PU1KLKF7&<5(j3GfaWcmP&@)(Zr00IdOV)O&ySO%ZIM11uLJFaZ7-0gifi=v)AB zBLR41`dk9v;L`-)sCP!bXA0mb{ZcN0jNq~96A9!58@LA+QwszDN4-5ZU<~*S_{<45 z&<3iB1b|K8JP?d#Bb@}^8%P>xZ1#)qe~~IW&mvWfa`G^ z<4RI5W~n&|4#i!^cffvS5Es!cb(EktQDM^n& zm45nF+plTPhn&D+S~!H8Ko_WG5ePMbOz9!a1a5$a?QWLyAtrE{6%Ju0FlYO%G=aSJ Y1tGV0rm1g>j{pDw07*qoM6N<$g5j*V=l}o! literal 0 HcmV?d00001 diff --git a/iphone/Maps/location-2.png b/iphone/Maps/location-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0a711a015bc2b4b7404bd2e74fe327653c2154 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zuor+ZBi{tC89+hF64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1U{c)B=- zSoAKPw43*kgG96an z{x95gR-lJ%<$uEoCX=Uldes?m9Fi?yD!Q%DkW(%+gSq+vr^JcIC41fr=ruUIMij(W zUssB8YhlZ~`ehd52Btp2#Oz(UDbk)yY7SBsTs{rP27G({Pd{W`k~o3w-NcvT$9;qE zlymbxxbu?od5s;8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10b)r+K~z|U?Uy@F!$1^8&kLaeD%b&^2%134!a%SAR=_VV=&0BW z^htmPK*Jvd(xr$UIfKfHz6sBO4@5rGPcy1b6}j+yhG!`=$V12ToJqqz*Ip2Lx}#;O8;0fV-^egBXax zXF1@c4s!b|fLp-111#V+Z~9UOQs5T{*g3tI0bmp8cz~1X7b+P5wt&bJoYcPa`USwR zCBOpuuIV!k0Bzu+0ywF?BDdCJ=ul?X0u~uOrklVVV5w@vN84nJ zuor+ZBi{tC89+hF64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1SRdAc}; zSo9vfyf>H0QQ+vu`w2`!S_{}@0(iIX;0jVwP$-b*W4PE-UBGm6g3Kk^<7p78@)w4d_xx9!` zE#h&7qEF6x-tJ%49UX#fp=Px;3C)S7e|L)pXf~hv!#`WE?zFB-+TAbzdF#CXOyhl~ idV}NR#H#=4R*YuC=abjn*ZdE3ErX}4pUXO@geCy8HEhrT literal 0 HcmV?d00001 diff --git a/iphone/Maps/location-3@2x.png b/iphone/Maps/location-3@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1056afe5d4dcc65d6e2ceec500dd8065410ce16a GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq z_#S{TQ1!{oO77h zH#8h?eJy+NE|108%l4uSRR>r;p9>odhA92+j(I8n=eaZ`!#cn0||(-hq%AuaGb$(K zuPae{sjxlMZ;fc|1QX`8RNgahw2QMOxY+-%tBc)@UtbwE>1H NgQu&X%Q~loCIHBBoml_? literal 0 HcmV?d00001 diff --git a/iphone/Maps/location-4.png b/iphone/Maps/location-4.png new file mode 100644 index 0000000000000000000000000000000000000000..44ed6efdbd9b58ff2c01833d1121ee631400307b GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zuor+ZBi{tC89+hF64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq=1TMdb&7< zSoB_nH!lGnB5;+t0Q_xRh6>u~@OAV@spv2F7&`48KFBOQatV+hN;tJ}!mf z{{2QPrnUnNFPPaMhzNc*Ne*tAE*m>5%wJihAvX8lNz-*%had59HA;yFYA;w@_h0;7 Y-L0*6w|gAd1Uizz)78&qol`;+0NC4P$N&HU literal 0 HcmV?d00001 diff --git a/iphone/Maps/location-4@2x.png b/iphone/Maps/location-4@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..517963d637d928c7552f290a7a3a748dcf58f646 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq z_#S{TIMo@&r&%4Qe}KW@-1%!$XV){G|M`j6U`qbwLoa@ac~~*D3mr^O+_i$K zeTV#_txHm`2KY3(&Ykd`ufp8mHuL>Saj%~w&uLh3vsR~Z?UK;hO!B^mdfz)-{#gIN gW0Hf=4`U{EX5TjHq)$ literal 0 HcmV?d00001