[ios] Added update maps counter to menu button.

This commit is contained in:
Ilya Grechuhin 2015-07-14 20:16:54 +03:00 committed by Alex Zolotarev
parent 0ab08575cb
commit e1bee1f4ab
9 changed files with 182 additions and 77 deletions

View file

@ -8,11 +8,13 @@
#import "MWMSideMenuButtonDelegate.h"
#import "MWMSideMenuDelegate.h"
#import "MWMSideMenuDownloadBadge.h"
#import <UIKit/UIKit.h>
@interface MWMSideMenuButton : UIButton
@interface MWMSideMenuButton : UIView <MWMSideMenuDownloadBadgeOwner>
@property (weak, nonatomic) id<MWMSideMenuInformationDisplayProtocol, MWMSideMenuTapProtocol> delegate;
@property (weak, nonatomic) MWMSideMenuDownloadBadge * downloadBadge;
- (instancetype)initWithFrame:(CGRect)frame __attribute__((unavailable("initWithFrame is not available")));
- (instancetype)init __attribute__((unavailable("init is not available")));

View file

@ -12,6 +12,7 @@
@interface MWMSideMenuButton()
@property (weak, nonatomic) IBOutlet UIImageView * buttonImage;
@property (nonatomic) CGRect defaultBounds;
@end
@ -37,9 +38,9 @@
{
self.alpha = 1.0;
}];
UIImageView const * const animationIV = self.imageView;
UIImageView const * const animationIV = self.buttonImage;
NSString const * const imageName = @"btn_green_menu_";
[self setImage:[UIImage imageNamed:[imageName stringByAppendingString:@"1"]] forState:UIControlStateNormal];
self.buttonImage.image = [UIImage imageNamed:[imageName stringByAppendingString:@"1"]];
static NSUInteger const animationImagesCount = 4;
NSMutableArray * const animationImages = [NSMutableArray arrayWithCapacity:animationImagesCount];
for (NSUInteger i = 0; i < animationImagesCount; ++i)
@ -54,7 +55,7 @@
- (void)layoutSubviews
{
[super layoutSubviews];
self.bounds = self.defaultBounds;
self.buttonImage.frame = self.bounds = self.defaultBounds;
self.maxY = self.superview.height - 2.0 * kViewControlsOffsetToBounds;
[self layoutXPosition:self.hidden];
}
@ -87,6 +88,7 @@
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.buttonImage.highlighted = YES;
UITouch * touch = [touches anyObject];
if (touch.tapCount > 1)
[NSObject cancelPreviousPerformRequestsWithTarget:self];
@ -94,10 +96,11 @@
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
self.buttonImage.highlighted = NO;
UITouch * touch = [touches anyObject];
if (touch.tapCount == 1)
[self performSelector:@selector(handleSingleTap) withObject:nil afterDelay:0.1];
else
else if (touch.tapCount > 1)
[self handleDoubleTap];
}
@ -129,4 +132,13 @@
}
}
#pragma mark - Properties
- (void)setDownloadBadge:(MWMSideMenuDownloadBadge *)downloadBadge
{
_downloadBadge = downloadBadge;
if (![downloadBadge.superview isEqual:self])
[self addSubview:downloadBadge];
}
@end

View file

@ -0,0 +1,24 @@
//
// MWMSideMenuDownloadBadge.h
// Maps
//
// Created by Ilya Grechuhin on 14.07.15.
// Copyright (c) 2015 MapsWithMe. All rights reserved.
//
#import <UIKit/UIKit.h>
@class MWMSideMenuDownloadBadge;
@protocol MWMSideMenuDownloadBadgeOwner <NSObject>
@property (weak, nonatomic) MWMSideMenuDownloadBadge * downloadBadge;
@end
@interface MWMSideMenuDownloadBadge : UIView
@property (nonatomic) NSUInteger outOfDateCount;
- (void)showAnimatedAfterDelay:(NSTimeInterval)delay;
@end

View file

@ -0,0 +1,57 @@
//
// MWMSideMenuDownloadBadge.m
// Maps
//
// Created by Ilya Grechuhin on 14.07.15.
// Copyright (c) 2015 MapsWithMe. All rights reserved.
//
#import "MWMMapViewControlsCommon.h"
#import "MWMSideMenuDownloadBadge.h"
#import "UIKitCategories.h"
@interface MWMSideMenuDownloadBadge ()
@property (weak, nonatomic) IBOutlet UIImageView * badgeBackground;
@property (weak, nonatomic) IBOutlet UILabel * downloadCount;
@end
@implementation MWMSideMenuDownloadBadge
- (void)layoutSubviews
{
self.maxX = self.superview.width;
self.badgeBackground.frame = self.bounds;
self.downloadCount.frame = self.bounds;
[super layoutSubviews];
}
- (void)showAnimatedAfterDelay:(NSTimeInterval)delay
{
self.hidden = YES;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
{
[self expand];
});
}
- (void)expand
{
if (self.outOfDateCount == 0)
return;
self.hidden = NO;
CATransform3D const zeroScale = CATransform3DScale(CATransform3DIdentity, 0.0, 0.0, 1.0);
self.badgeBackground.layer.transform = self.downloadCount.layer.transform = zeroScale;
self.badgeBackground.alpha = self.downloadCount.alpha = 0.0;
self.badgeBackground.hidden = NO;
self.downloadCount.hidden = NO;
self.downloadCount.text = @(self.outOfDateCount).stringValue;
[UIView animateWithDuration:framesDuration(4) animations:^
{
self.badgeBackground.layer.transform = self.downloadCount.layer.transform = CATransform3DIdentity;
self.badgeBackground.alpha = self.downloadCount.alpha = 1.0;
}];
}
@end

View file

@ -16,6 +16,7 @@
#import "MWMSideMenuButton.h"
#import "MWMSideMenuButtonDelegate.h"
#import "MWMSideMenuDelegate.h"
#import "MWMSideMenuDownloadBadge.h"
#import "MWMSideMenuManager.h"
#import "MWMSideMenuView.h"
#import "SettingsAndMoreVC.h"
@ -34,6 +35,7 @@ extern NSString * const kAlohalyticsTapEventKey;
@property (weak, nonatomic) MapViewController * controller;
@property (nonatomic) IBOutlet MWMSideMenuButton * menuButton;
@property (nonatomic) IBOutlet MWMSideMenuView * sideMenu;
@property (nonatomic) IBOutlet MWMSideMenuDownloadBadge * downloadBadge;
@end
@ -177,6 +179,17 @@ extern NSString * const kAlohalyticsTapEventKey;
}];
}
- (void)addDownloadBadgeToView:(UIView<MWMSideMenuDownloadBadgeOwner> *)view
{
int const count = GetFramework().GetCountryTree().GetActiveMapLayout().GetOutOfDateCount();
if (count > 0)
{
self.downloadBadge.outOfDateCount = count;
view.downloadBadge = self.downloadBadge;
[self.downloadBadge showAnimatedAfterDelay:framesDuration(10)];
}
}
#pragma mark - Properties
- (void)setState:(MWMSideMenuState)state
@ -187,11 +200,12 @@ extern NSString * const kAlohalyticsTapEventKey;
{
case MWMSideMenuStateActive:
[Alohalytics logEvent:kAlohalyticsTapEventKey withValue:@"menu"];
self.sideMenu.outOfDateCount = GetFramework().GetCountryTree().GetActiveMapLayout().GetOutOfDateCount();
[self addDownloadBadgeToView:self.sideMenu];
[self showMenu];
[self.sideMenu setup];
break;
case MWMSideMenuStateInactive:
[self addDownloadBadgeToView:self.menuButton];
if (_state == MWMSideMenuStateActive)
{
[self.menuButton setHidden:NO animated:NO];

View file

@ -6,14 +6,16 @@
// Copyright (c) 2015 MapsWithMe. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "MWMSideMenuDelegate.h"
#import "MWMSideMenuDownloadBadge.h"
#import "UIKitCategories.h"
#import <UIKit/UIKit.h>
@interface MWMSideMenuView : UIView
@interface MWMSideMenuView : SolidTouchView <MWMSideMenuDownloadBadgeOwner>
@property (weak, nonatomic, readonly) IBOutlet UIView * dimBackground;
@property (weak, nonatomic) id<MWMSideMenuInformationDisplayProtocol> delegate;
@property (nonatomic) NSUInteger outOfDateCount;
@property (weak, nonatomic) MWMSideMenuDownloadBadge * downloadBadge;
- (instancetype)initWithFrame:(CGRect)frame __attribute__((unavailable("initWithFrame is not available")));
- (instancetype)init __attribute__((unavailable("init is not available")));

View file

@ -7,6 +7,7 @@
//
#import "MWMMapViewControlsCommon.h"
#import "MWMSideMenuDownloadBadge.h"
#import "MWMSideMenuView.h"
#import "UIKitCategories.h"
@ -26,9 +27,6 @@
@property (weak, nonatomic) IBOutlet UIButton * shareLocationLabel;
@property (weak, nonatomic) IBOutlet UIButton * searchLabel;
@property (weak, nonatomic) IBOutlet UIImageView * downloadBadge;
@property (weak, nonatomic) IBOutlet UILabel * downloadCount;
@property (nonatomic) NSArray * buttons;
@property (nonatomic) NSArray * labels;
@ -52,12 +50,6 @@
self.labels = @[self.shareLocationLabel, self.settingsLabel, self.downloadMapsLabel, self.bookmarksLabel, self.searchLabel];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// Prevent super call to stop event propagation
// [super touchesBegan:touches withEvent:event];
}
- (void)setup
{
self.contentScaleFactor = self.superview.contentScaleFactor;
@ -73,10 +65,8 @@
animationIV.animationDuration = framesDuration(animationIV.animationImages.count);
animationIV.animationRepeatCount = 1;
[animationIV startAnimating];
self.downloadBadge.hidden = YES;
self.downloadCount.hidden = YES;
[self updateMenuBackground];
[self updateMenuUI];
[self showAnimation];
[self setNeedsLayout];
}
@ -149,11 +139,6 @@
self.bookmarksLabel.maxX = rightBound;
self.searchLabel.maxX = rightBound;
self.downloadBadge.maxX = self.downloadMapsButton.maxX;
self.downloadCount.maxX = self.downloadMapsButton.maxX;
self.downloadBadge.minY = self.downloadMapsButton.minY;
self.downloadCount.minY = self.downloadMapsButton.minY;
m2::PointD const pivot(self.searchButton.minX * self.contentScaleFactor - 2.0 * kViewControlsOffsetToBounds, self.searchButton.maxY * self.contentScaleFactor - kViewControlsOffsetToBounds);
[self.delegate setRulerPivot:pivot];
[self.delegate setCopyrightLabelPivot:pivot];
@ -171,41 +156,14 @@
}];
}
- (void)updateMenuUI
{
[self showAnimation];
[self performSelector:@selector(updateMenuOutOfDateBadge) withObject:nil afterDelay:framesDuration(10)];
}
- (void)updateMenuOutOfDateBadge
{
if (self.outOfDateCount == 0)
return;
CATransform3D const zeroScale = CATransform3DScale(CATransform3DIdentity, 0.0, 0.0, 1.0);
self.downloadBadge.layer.transform = zeroScale;
self.downloadCount.layer.transform = zeroScale;
self.downloadBadge.alpha = 0.0;
self.downloadCount.alpha = 0.0;
self.downloadBadge.hidden = NO;
self.downloadCount.hidden = NO;
self.downloadCount.text = @(self.outOfDateCount).stringValue;
[UIView animateWithDuration:framesDuration(4) animations:^
{
self.downloadBadge.layer.transform = CATransform3DIdentity;
self.downloadCount.layer.transform = CATransform3DIdentity;
self.downloadBadge.alpha = 1.0;
self.downloadCount.alpha = 1.0;
}];
}
- (void)showAnimation
{
[self.labels enumerateObjectsUsingBlock:^(UIButton * label, NSUInteger idx, BOOL *stop)
[self.labels enumerateObjectsUsingBlock:^(UIButton * label, NSUInteger idx, BOOL * stop)
{
label.alpha = 0.0;
}];
[self.buttons enumerateObjectsUsingBlock:^(UIButton * button, NSUInteger idx, BOOL *stop)
[self.buttons enumerateObjectsUsingBlock:^(UIButton * button, NSUInteger idx, BOOL * stop)
{
button.alpha = 0.0;
}];
@ -249,4 +207,13 @@
[CATransaction commit];
}
#pragma mark - Properties
- (void)setDownloadBadge:(MWMSideMenuDownloadBadge *)downloadBadge
{
_downloadBadge = downloadBadge;
if (![downloadBadge.superview isEqual:self.downloadMapsButton])
[self.downloadMapsButton addSubview:downloadBadge];
}
@end

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
@ -7,7 +7,8 @@
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MWMSideMenuManager">
<connections>
<outlet property="menuButton" destination="cTK-Dt-qgQ" id="g1C-K4-dov"/>
<outlet property="downloadBadge" destination="ap1-Ml-Dfy" id="bpF-Z1-YAt"/>
<outlet property="menuButton" destination="Mu5-FL-O9o" id="rNf-Pw-Kqq"/>
<outlet property="sideMenu" destination="i5M-Pr-FkT" id="p49-Bn-Hkx"/>
</connections>
</placeholder>
@ -111,17 +112,6 @@
<action selector="menuActionDownloadMaps" destination="-1" eventType="touchUpInside" id="mRz-aq-RBf"/>
</connections>
</button>
<imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="img_counter" id="AIs-PS-5d2" userLabel="Download Badge">
<rect key="frame" x="288" y="376" width="24" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="99" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yPG-HI-11x" userLabel="Download Count">
<rect key="frame" x="288" y="376" width="24" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" lineBreakMode="wordWrap" id="mWD-fB-THv" userLabel="Bookmarks Label">
<rect key="frame" x="8" y="440" width="240" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
@ -192,8 +182,6 @@
<outlet property="bookmarksButton" destination="ZEc-sk-zsN" id="KjM-Yb-Jus"/>
<outlet property="bookmarksLabel" destination="mWD-fB-THv" id="gIu-lT-I05"/>
<outlet property="dimBackground" destination="4iS-Dh-FAa" id="ww7-Md-QuY"/>
<outlet property="downloadBadge" destination="AIs-PS-5d2" id="lUs-mB-j7R"/>
<outlet property="downloadCount" destination="yPG-HI-11x" id="HX1-3s-fpq"/>
<outlet property="downloadMapsButton" destination="pLL-6e-i3i" id="Wd7-aB-nMt"/>
<outlet property="downloadMapsLabel" destination="joI-Q5-Iyo" id="hzF-K0-klD"/>
<outlet property="searchButton" destination="rpT-xg-5E2" id="uAa-2k-Vdf"/>
@ -205,16 +193,49 @@
</connections>
<point key="canvasLocation" x="301" y="305"/>
</view>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" showsTouchWhenHighlighted="YES" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="cTK-Dt-qgQ" userLabel="Show Menu Button" customClass="MWMSideMenuButton">
<view contentMode="scaleToFill" id="ap1-Ml-Dfy" userLabel="Download Badge" customClass="MWMSideMenuDownloadBadge">
<rect key="frame" x="0.0" y="0.0" width="24" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="img_counter" id="AIs-PS-5d2" userLabel="Background">
<rect key="frame" x="0.0" y="0.0" width="24" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="99" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="yPG-HI-11x" userLabel="Download Count">
<rect key="frame" x="0.0" y="0.0" width="24" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="badgeBackground" destination="AIs-PS-5d2" id="n7J-su-7r7"/>
<outlet property="downloadCount" destination="yPG-HI-11x" id="fr5-Z4-OWh"/>
</connections>
<point key="canvasLocation" x="81" y="467"/>
</view>
<view contentMode="scaleToFill" id="Mu5-FL-O9o" customClass="MWMSideMenuButton">
<rect key="frame" x="0.0" y="0.0" width="56" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="btn_green_menu_1" highlightedImage="btn_green_menu_pressed" id="FPt-Vy-4Lm" userLabel="buttonImage">
<rect key="frame" x="0.0" y="0.0" width="56" height="56"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</imageView>
</subviews>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<state key="normal" image="btn_green_menu_1">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<state key="highlighted" image="btn_green_menu_pressed"/>
<point key="canvasLocation" x="48" y="561"/>
</button>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="buttonImage" destination="FPt-Vy-4Lm" id="etF-R1-wPc"/>
</connections>
<point key="canvasLocation" x="65" y="561"/>
</view>
</objects>
<resources>
<image name="btn_green_bookmarks" width="56" height="56"/>

View file

@ -15,6 +15,7 @@
28AD73880D9D96C1002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD73870D9D96C1002E5188 /* MainWindow.xib */; };
340F24631B14910500F874CD /* RouteState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340F24621B14910500F874CD /* RouteState.mm */; };
34287FDC1B3D7C4800F9959C /* libFlurry_6.4.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34287FDB1B3D7C4800F9959C /* libFlurry_6.4.0.a */; };
3428BC131B55477E00C85B30 /* MWMSideMenuDownloadBadge.m in Sources */ = {isa = PBXBuildFile; fileRef = 3428BC121B55477E00C85B30 /* MWMSideMenuDownloadBadge.m */; };
342AD76F1B53D30C00E0B997 /* UIButton+RuntimeAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 342AD76E1B53D30C00E0B997 /* UIButton+RuntimeAttributes.m */; };
342AD7721B53D32F00E0B997 /* UIView+RuntimeAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = 342AD7711B53D32F00E0B997 /* UIView+RuntimeAttributes.m */; };
343F262E1AEFC4A300388A6D /* MWMFrameworkUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 343F262D1AEFC4A300388A6D /* MWMFrameworkUtils.mm */; };
@ -356,6 +357,8 @@
340F24621B14910500F874CD /* RouteState.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RouteState.mm; sourceTree = "<group>"; };
340F24641B15F01D00F874CD /* MWMSideMenuDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMSideMenuDelegate.h; sourceTree = "<group>"; };
34287FDB1B3D7C4800F9959C /* libFlurry_6.4.0.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libFlurry_6.4.0.a; path = Statistics/libFlurry_6.4.0.a; sourceTree = "<group>"; };
3428BC111B55477E00C85B30 /* MWMSideMenuDownloadBadge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMSideMenuDownloadBadge.h; sourceTree = "<group>"; };
3428BC121B55477E00C85B30 /* MWMSideMenuDownloadBadge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWMSideMenuDownloadBadge.m; sourceTree = "<group>"; };
342AD76D1B53D30C00E0B997 /* UIButton+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+RuntimeAttributes.h"; sourceTree = "<group>"; };
342AD76E1B53D30C00E0B997 /* UIButton+RuntimeAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+RuntimeAttributes.m"; sourceTree = "<group>"; };
342AD7701B53D32F00E0B997 /* UIView+RuntimeAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+RuntimeAttributes.h"; sourceTree = "<group>"; };
@ -1160,6 +1163,8 @@
34BC72191B0DECAE0012A34B /* MWMSideMenuView.mm */,
34BC721A1B0DECAE0012A34B /* MWMSideMenuViews.xib */,
340F24641B15F01D00F874CD /* MWMSideMenuDelegate.h */,
3428BC111B55477E00C85B30 /* MWMSideMenuDownloadBadge.h */,
3428BC121B55477E00C85B30 /* MWMSideMenuDownloadBadge.m */,
);
path = SideMenu;
sourceTree = "<group>";
@ -2239,6 +2244,7 @@
F6588E371B15D87A00EE1E58 /* MWMBookmarkColorCell.mm in Sources */,
F6D409FA1B319BD70041730F /* ContextViews.mm in Sources */,
349A357A1B53D4C9009677EE /* MWMCircularProgress.m in Sources */,
3428BC131B55477E00C85B30 /* MWMSideMenuDownloadBadge.m in Sources */,
97A8000C18B21363000C07A2 /* SearchView.mm in Sources */,
FAA5C2A2144F135F005337F6 /* LocationManager.mm in Sources */,
F66A8FAC1B09F137001B9C97 /* MWMiPadPlacePage.mm in Sources */,