mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 11:08:06 +00:00
Change InAppSettings place
All settings with Linphone Colors
This commit is contained in:
parent
de9ebfb8b0
commit
ee358816b7
42 changed files with 1191 additions and 150 deletions
|
|
@ -17,12 +17,19 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef UILINPHONE_H
|
||||
#define UILINPHONE_H
|
||||
|
||||
#import <UIKit/UIColor.h>
|
||||
|
||||
#define LINPHONE_MAIN_COLOR [UIColor colorWithRed:207.0f/255.0f green:76.0f/255.0f blue:41.0f/255.0f alpha:1.0f]
|
||||
#define LINPHONE_TABLE_CELL_BACKGROUND_COLOR [UIColor colorWithRed:207.0f/255.0f green:76.0f/255.0f blue:41.0f/255.0f alpha:1.0f]
|
||||
|
||||
@interface UIColor (LightAndDark)
|
||||
|
||||
#endif
|
||||
- (UIColor *)adjustHue:(float)hm saturation:(float)sm brightness:(float)bm alpha:(float)am;
|
||||
|
||||
- (UIColor *)multColor:(float)mult;
|
||||
|
||||
- (UIColor *)lighterColor;
|
||||
|
||||
- (UIColor *)darkerColor;
|
||||
|
||||
@end
|
||||
52
Classes/LinphoneUI/UILinphone.m
Normal file
52
Classes/LinphoneUI/UILinphone.m
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/* UILinphone.m
|
||||
*
|
||||
* Copyright (C) 2012 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "UILinphone.h"
|
||||
|
||||
@implementation UIColor (LightAndDark)
|
||||
|
||||
- (UIColor *)multColor:(float)mult {
|
||||
float h, s, b, a;
|
||||
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
|
||||
return [UIColor colorWithHue:h
|
||||
saturation:s
|
||||
brightness:MIN(MAX(b * mult, 0.0), 1.0)
|
||||
alpha:a];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (UIColor *)adjustHue:(float)hm saturation:(float)sm brightness:(float)bm alpha:(float)am {
|
||||
float h, s, b, a;
|
||||
if ([self getHue:&h saturation:&s brightness:&b alpha:&a])
|
||||
return [UIColor colorWithHue:MIN(MAX(h + hm, 0.0), 1.0)
|
||||
saturation:MIN(MAX(s + sm, 0.0), 1.0)
|
||||
brightness:MIN(MAX(b + bm, 0.0), 1.0)
|
||||
alpha:MIN(MAX(a + am, 0.0), 1.0)];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (UIColor *)lighterColor {
|
||||
return [self multColor:1.3];
|
||||
}
|
||||
|
||||
- (UIColor *)darkerColor {
|
||||
return [self multColor:0.75];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -20,16 +20,134 @@
|
|||
#import "SettingsViewController.h"
|
||||
#import "LinphoneManager.h"
|
||||
#import "UILinphone.h"
|
||||
#import "UACellBackgroundView.h"
|
||||
|
||||
static void removeTableBackground(UIView* view) {
|
||||
if([view isKindOfClass:[UITableView class]]) {
|
||||
[view setBackgroundColor:[UIColor clearColor]];
|
||||
}
|
||||
for(UIView *subview in [view subviews]) {
|
||||
removeTableBackground(subview);
|
||||
}
|
||||
#import "DCRoundSwitch.h"
|
||||
|
||||
#import "IASKSpecifierValuesViewController.h"
|
||||
#import "IASKPSTextFieldSpecifierViewCell.h"
|
||||
#import "IASKSpecifier.h"
|
||||
#import "IASKTextField.h"
|
||||
|
||||
|
||||
#pragma mark - IASKSwitchEx Class
|
||||
|
||||
@interface IASKSwitchEx : DCRoundSwitch {
|
||||
NSString *_key;
|
||||
}
|
||||
|
||||
@property (nonatomic, retain) NSString *key;
|
||||
|
||||
@end
|
||||
|
||||
@implementation IASKSwitchEx
|
||||
|
||||
@synthesize key=_key;
|
||||
|
||||
- (void)dealloc {
|
||||
[_key release], _key = nil;
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - IASKSpecifierValuesViewControllerEx Class
|
||||
|
||||
// Patch IASKSpecifierValuesViewController
|
||||
@interface IASKSpecifierValuesViewControllerEx: IASKSpecifierValuesViewController
|
||||
|
||||
@end
|
||||
|
||||
@implementation IASKSpecifierValuesViewControllerEx
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
|
||||
|
||||
// Background View
|
||||
UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease];
|
||||
cell.selectedBackgroundView = selectedBackgroundView;
|
||||
[selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR];
|
||||
return cell;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - IASKAppSettingsViewControllerEx Class
|
||||
|
||||
@interface IASKAppSettingsViewController(PrivateInterface)
|
||||
- (UITableViewCell*)newCellForIdentifier:(NSString*)identifier;
|
||||
@end;
|
||||
|
||||
@interface IASKAppSettingsViewControllerEx : IASKAppSettingsViewController
|
||||
|
||||
@end
|
||||
|
||||
@implementation IASKAppSettingsViewControllerEx
|
||||
|
||||
- (UITableViewCell*)newCellForIdentifier:(NSString*)identifier {
|
||||
UITableViewCell *cell = nil;
|
||||
if ([identifier isEqualToString:kIASKPSToggleSwitchSpecifier]) {
|
||||
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kIASKPSToggleSwitchSpecifier];
|
||||
cell.accessoryView = [[[IASKSwitchEx alloc] initWithFrame:CGRectMake(0, 0, 79, 27)] autorelease];
|
||||
[((IASKSwitchEx*)cell.accessoryView) addTarget:self action:@selector(toggledValue:) forControlEvents:UIControlEventValueChanged];
|
||||
[((IASKSwitchEx*)cell.accessoryView) setOnTintColor:LINPHONE_MAIN_COLOR];
|
||||
cell.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
} else {
|
||||
cell = [super newCellForIdentifier:identifier];
|
||||
}
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)initIASKAppSettingsViewControllerEx {
|
||||
// Force kIASKSpecifierValuesViewControllerIndex
|
||||
static int kIASKSpecifierValuesViewControllerIndex = 0;
|
||||
_viewList = [[NSMutableArray alloc] init];
|
||||
[_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKSpecifierValuesView", @"ViewName",nil]];
|
||||
[_viewList addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"IASKAppSettingsView", @"ViewName",nil]];
|
||||
|
||||
NSMutableDictionary *newItemDict = [NSMutableDictionary dictionaryWithCapacity:3];
|
||||
[newItemDict addEntriesFromDictionary: [_viewList objectAtIndex:kIASKSpecifierValuesViewControllerIndex]]; // copy the title and explain strings
|
||||
|
||||
IASKSpecifierValuesViewController *targetViewController = [[IASKSpecifierValuesViewControllerEx alloc] init];
|
||||
// add the new view controller to the dictionary and then to the 'viewList' array
|
||||
[newItemDict setObject:targetViewController forKey:@"viewController"];
|
||||
[_viewList replaceObjectAtIndex:kIASKSpecifierValuesViewControllerIndex withObject:newItemDict];
|
||||
[targetViewController release];
|
||||
}
|
||||
|
||||
- (id)initWithStyle:(UITableViewStyle)style {
|
||||
self = [super initWithStyle:style];
|
||||
if(self != nil) {
|
||||
[self initIASKAppSettingsViewControllerEx];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UITableViewCell * cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
|
||||
|
||||
if([cell isKindOfClass:[IASKPSTextFieldSpecifierViewCell class]]) {
|
||||
UITextField *field = ((IASKPSTextFieldSpecifierViewCell*)cell).textField;
|
||||
[field setTextColor:LINPHONE_MAIN_COLOR];
|
||||
}
|
||||
|
||||
cell.detailTextLabel.textColor = LINPHONE_MAIN_COLOR;
|
||||
|
||||
// Background View
|
||||
UACellBackgroundView *selectedBackgroundView = [[[UACellBackgroundView alloc] initWithFrame:CGRectZero] autorelease];
|
||||
cell.selectedBackgroundView = selectedBackgroundView;
|
||||
[selectedBackgroundView setBackgroundColor:LINPHONE_TABLE_CELL_BACKGROUND_COLOR];
|
||||
return cell;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - UINavigationBarEx Class
|
||||
|
||||
@interface UINavigationBarEx: UINavigationBar {
|
||||
|
||||
}
|
||||
|
|
@ -41,7 +159,7 @@ static void removeTableBackground(UIView* view) {
|
|||
#pragma mark - Lifecycle Functions
|
||||
|
||||
- (void)initUINavigationBarEx {
|
||||
[self setTintColor:LINPHONE_MAIN_COLOR];
|
||||
[self setTintColor:[LINPHONE_MAIN_COLOR adjustHue:5.0f/180.0f saturation:0.0f brightness:0.0f alpha:0.0f]];
|
||||
}
|
||||
|
||||
- (id)init {
|
||||
|
|
@ -75,20 +193,33 @@ static void removeTableBackground(UIView* view) {
|
|||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - UINavigationControllerEx Class
|
||||
|
||||
@interface UINavigationControllerEx : UINavigationController
|
||||
|
||||
@end
|
||||
|
||||
@implementation UINavigationControllerEx
|
||||
|
||||
+ (void)removeTableBackground:(UIView*)view {
|
||||
if([view isKindOfClass:[UITableView class]]) {
|
||||
[view setBackgroundColor:[UIColor clearColor]];
|
||||
}
|
||||
for(UIView *subview in [view subviews]) {
|
||||
[UINavigationControllerEx removeTableBackground:subview];
|
||||
}
|
||||
}
|
||||
|
||||
- (id)initWithRootViewController:(UIViewController *)rootViewController {
|
||||
removeTableBackground(rootViewController.view);
|
||||
[UINavigationControllerEx removeTableBackground:rootViewController.view];
|
||||
return [super initWithRootViewController:rootViewController];
|
||||
}
|
||||
|
||||
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
|
||||
removeTableBackground(viewController.view);
|
||||
[UINavigationControllerEx removeTableBackground:viewController.view];
|
||||
|
||||
[viewController viewWillAppear:FALSE]; // Force load: Load Title
|
||||
UILabel *labelTitleView = [[UILabel alloc] init];
|
||||
labelTitleView.backgroundColor = [UIColor clearColor];
|
||||
labelTitleView.textColor = [UIColor colorWithRed:0x41/255.0f green:0x48/255.0f blue:0x4f/255.0f alpha:1.0];
|
||||
|
|
@ -96,7 +227,7 @@ static void removeTableBackground(UIView* view) {
|
|||
labelTitleView.font = [UIFont boldSystemFontOfSize:20];
|
||||
labelTitleView.shadowOffset = CGSizeMake(0,1);
|
||||
labelTitleView.textAlignment = UITextAlignmentCenter;
|
||||
labelTitleView.text = viewController.navigationItem.title;
|
||||
labelTitleView.text = viewController.title;
|
||||
[labelTitleView sizeToFit];
|
||||
viewController.navigationItem.titleView = labelTitleView;
|
||||
|
||||
|
|
@ -105,20 +236,21 @@ static void removeTableBackground(UIView* view) {
|
|||
|
||||
- (void)setViewControllers:(NSArray *)viewControllers {
|
||||
for(UIViewController *controller in viewControllers) {
|
||||
removeTableBackground(controller.view);
|
||||
[UINavigationControllerEx removeTableBackground:controller.view];
|
||||
}
|
||||
[super setViewControllers:viewControllers];
|
||||
}
|
||||
|
||||
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated {
|
||||
for(UIViewController *controller in viewControllers) {
|
||||
removeTableBackground(controller.view);
|
||||
[UINavigationControllerEx removeTableBackground:controller.view];
|
||||
}
|
||||
[super setViewControllers:viewControllers animated:animated];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation SettingsViewController
|
||||
|
||||
@synthesize settingsController;
|
||||
|
|
@ -170,7 +302,6 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
settingsController.settingsStore = [[LinphoneManager instance] settingsStore];
|
||||
|
||||
navigationController.view.frame = self.view.frame;
|
||||
removeTableBackground(navigationController.view);
|
||||
[navigationController pushViewController:settingsController animated:FALSE];
|
||||
[self.view addSubview: navigationController.view];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<object class="IBUIViewController" id="73380722">
|
||||
<bool key="IBUIAutoresizesArchivedViewToFullSize">NO</bool>
|
||||
<object class="IBUINavigationItem" key="IBUINavigationItem" id="1014852814">
|
||||
<string key="IBUITitle">Settings</string>
|
||||
<string key="IBUITitle"/>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
<bool key="IBUIMultipleTouchEnabled">YES</bool>
|
||||
<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
|
||||
</object>
|
||||
<array key="IBUIViewControllers" id="0"/>
|
||||
<array class="NSMutableArray" key="IBUIViewControllers"/>
|
||||
</object>
|
||||
</array>
|
||||
<object class="IBObjectContainer" key="IBDocument.Objects">
|
||||
|
|
@ -115,7 +115,7 @@
|
|||
<array key="orderedObjects">
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">0</int>
|
||||
<reference key="object" ref="0"/>
|
||||
<array key="object" id="0"/>
|
||||
<reference key="children" ref="1000"/>
|
||||
<nil key="parent"/>
|
||||
</object>
|
||||
|
|
@ -179,7 +179,7 @@
|
|||
<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
<string key="6.CustomClassName">IASKAppSettingsViewController</string>
|
||||
<string key="6.CustomClassName">IASKAppSettingsViewControllerEx</string>
|
||||
<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
|
||||
</dictionary>
|
||||
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
|
||||
|
|
@ -209,6 +209,14 @@
|
|||
<string key="minorKey">./Classes/IASKAppSettingsViewController.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">IASKAppSettingsViewControllerEx</string>
|
||||
<string key="superclassName">IASKAppSettingsViewController</string>
|
||||
<object class="IBClassDescriptionSource" key="sourceIdentifier">
|
||||
<string key="majorKey">IBProjectSource</string>
|
||||
<string key="minorKey">./Classes/IASKAppSettingsViewControllerEx.h</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBPartialClassDescription">
|
||||
<string key="className">SettingsViewController</string>
|
||||
<string key="superclassName">UIViewController</string>
|
||||
|
|
|
|||
33
Classes/Utils/DCRoundSwitch/DCRoundSwitch.h
Executable file
33
Classes/Utils/DCRoundSwitch/DCRoundSwitch.h
Executable file
|
|
@ -0,0 +1,33 @@
|
|||
//
|
||||
// DCRoundSwitch.h
|
||||
//
|
||||
// Created by Patrick Richards on 28/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
@class DCRoundSwitchToggleLayer;
|
||||
@class DCRoundSwitchOutlineLayer;
|
||||
@class DCRoundSwitchKnobLayer;
|
||||
|
||||
@interface DCRoundSwitch : UIControl
|
||||
|
||||
@property (nonatomic, retain) UIColor *onTintColor; // default: blue (matches normal UISwitch)
|
||||
@property (nonatomic, getter=isOn) BOOL on; // default: NO
|
||||
@property (nonatomic, copy) NSString *onText; // default: 'ON' - automatically localized
|
||||
@property (nonatomic, copy) NSString *offText; // default: 'OFF' - automatically localized
|
||||
|
||||
+ (Class)knobLayerClass;
|
||||
+ (Class)outlineLayerClass;
|
||||
+ (Class)toggleLayerClass;
|
||||
|
||||
- (void)setOn:(BOOL)newOn animated:(BOOL)animated;
|
||||
- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents;
|
||||
|
||||
@end
|
||||
468
Classes/Utils/DCRoundSwitch/DCRoundSwitch.m
Executable file
468
Classes/Utils/DCRoundSwitch/DCRoundSwitch.m
Executable file
|
|
@ -0,0 +1,468 @@
|
|||
//
|
||||
// DCRoundSwitch.m
|
||||
//
|
||||
// Created by Patrick Richards on 28/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import "DCRoundSwitch.h"
|
||||
#import "DCRoundSwitchToggleLayer.h"
|
||||
#import "DCRoundSwitchOutlineLayer.h"
|
||||
#import "DCRoundSwitchKnobLayer.h"
|
||||
|
||||
@interface DCRoundSwitch () <UIGestureRecognizerDelegate>
|
||||
|
||||
@property (nonatomic, retain) DCRoundSwitchOutlineLayer *outlineLayer;
|
||||
@property (nonatomic, retain) DCRoundSwitchToggleLayer *toggleLayer;
|
||||
@property (nonatomic, retain) DCRoundSwitchKnobLayer *knobLayer;
|
||||
@property (nonatomic, retain) CAShapeLayer *clipLayer;
|
||||
@property (nonatomic, assign) BOOL ignoreTap;
|
||||
|
||||
- (void)setup;
|
||||
- (void)useLayerMasking;
|
||||
- (void)removeLayerMask;
|
||||
- (void)positionLayersAndMask;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DCRoundSwitch
|
||||
@synthesize outlineLayer, toggleLayer, knobLayer, clipLayer, ignoreTap;
|
||||
@synthesize on, onText, offText;
|
||||
@synthesize onTintColor;
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Init & Memory Managment
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[outlineLayer release];
|
||||
[toggleLayer release];
|
||||
[knobLayer release];
|
||||
[clipLayer release];
|
||||
|
||||
[onTintColor release];
|
||||
[onText release];
|
||||
[offText release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
self.frame = CGRectMake(0, 0, 77, 27);
|
||||
[self setup];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithCoder:(NSCoder *)aDecoder
|
||||
{
|
||||
if ((self = [super initWithCoder:aDecoder]))
|
||||
{
|
||||
[self setup];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
{
|
||||
if ((self = [super initWithFrame:frame]))
|
||||
{
|
||||
[self setup];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (Class)knobLayerClass {
|
||||
return [DCRoundSwitchKnobLayer class];
|
||||
}
|
||||
|
||||
+ (Class)outlineLayerClass {
|
||||
return [DCRoundSwitchOutlineLayer class];
|
||||
}
|
||||
|
||||
+ (Class)toggleLayerClass {
|
||||
return [DCRoundSwitchToggleLayer class];
|
||||
}
|
||||
|
||||
- (void)setup
|
||||
{
|
||||
// this way you can set the background color to black or something similar so it can be seen in IB
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
|
||||
// remove the flexible width/height autoresizing masks if they have been set
|
||||
UIViewAutoresizing mask = (int)self.autoresizingMask;
|
||||
if (mask & UIViewAutoresizingFlexibleHeight)
|
||||
self.autoresizingMask ^= UIViewAutoresizingFlexibleHeight;
|
||||
|
||||
if (mask & UIViewAutoresizingFlexibleWidth)
|
||||
self.autoresizingMask ^= UIViewAutoresizingFlexibleWidth;
|
||||
|
||||
// setup default texts
|
||||
NSBundle *uiKitBundle = [NSBundle bundleWithIdentifier:@"com.apple.UIKit"];
|
||||
self.onText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"ON" value:nil table:nil] : @"ON";
|
||||
self.offText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"OFF" value:nil table:nil] : @"OFF";
|
||||
|
||||
// the switch has three layers, (ordered from bottom to top):
|
||||
//
|
||||
// * toggleLayer * (bottom of the layer stack)
|
||||
// this layer contains the onTintColor (blue by default), the text, and the shadown for the knob. the knob shadow is
|
||||
// on this layer because it needs to go under the outlineLayer so it doesn't bleed out over the edge of the control.
|
||||
// this layer moves when the switch moves
|
||||
|
||||
// * outlineLayer * (middle of the layer stack)
|
||||
// this is the outline of the control, it's inner shadow, and the inner gloss. the inner shadow is on this layer
|
||||
// because it must stay still while the switch animates. the inner gloss is also here because it doesn't move, and also
|
||||
// because it needs to go uner the knobLayer.
|
||||
// this layer appears to always stay in the same spot.
|
||||
|
||||
// * knobLayer * (top of the layer stack)
|
||||
// this is the knob, and sits on top of the layer stack. note that the knob shadow is NOT drawn here, it is drawn on the
|
||||
// toggleLayer so it doesn't bleed out over the outlineLayer.
|
||||
|
||||
self.toggleLayer = [[[[[self class] toggleLayerClass] alloc] initWithOnString:self.onText offString:self.offText onTintColor:[UIColor colorWithRed:0.000 green:0.478 blue:0.882 alpha:1.0]] autorelease];
|
||||
self.toggleLayer.drawOnTint = NO;
|
||||
self.toggleLayer.clip = YES;
|
||||
[self.layer addSublayer:self.toggleLayer];
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
|
||||
self.outlineLayer = [[[self class] outlineLayerClass] layer];
|
||||
[self.toggleLayer addSublayer:self.outlineLayer];
|
||||
[self.outlineLayer setNeedsDisplay];
|
||||
|
||||
self.knobLayer = [[[self class] knobLayerClass] layer];
|
||||
[self.layer addSublayer:self.knobLayer];
|
||||
[self.knobLayer setNeedsDisplay];
|
||||
|
||||
self.toggleLayer.contentsScale = self.outlineLayer.contentsScale = self.knobLayer.contentsScale = [[UIScreen mainScreen] scale];
|
||||
|
||||
// tap gesture for toggling the switch
|
||||
UITapGestureRecognizer *tapGestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self
|
||||
action:@selector(tapped:)] autorelease];
|
||||
[tapGestureRecognizer setDelegate:self];
|
||||
[self addGestureRecognizer:tapGestureRecognizer];
|
||||
|
||||
// pan gesture for moving the switch knob manually
|
||||
UIPanGestureRecognizer *panGestureRecognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:self
|
||||
action:@selector(toggleDragged:)] autorelease];
|
||||
[panGestureRecognizer setDelegate:self];
|
||||
[self addGestureRecognizer:panGestureRecognizer];
|
||||
|
||||
[self setNeedsLayout];
|
||||
|
||||
// setup the layer positions
|
||||
[self positionLayersAndMask];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Setup Frame/Layout
|
||||
|
||||
- (void)sizeToFit
|
||||
{
|
||||
[super sizeToFit];
|
||||
|
||||
NSString *onString = self.toggleLayer.onString;
|
||||
NSString *offString = self.toggleLayer.offString;
|
||||
|
||||
CGFloat width = [onString sizeWithFont:self.toggleLayer.labelFont].width;
|
||||
CGFloat offWidth = [offString sizeWithFont:self.toggleLayer.labelFont].width;
|
||||
|
||||
if(offWidth > width)
|
||||
width = offWidth;
|
||||
|
||||
width += self.toggleLayer.bounds.size.width * 2.;//add 2x the knob for padding
|
||||
|
||||
CGRect newFrame = self.frame;
|
||||
CGFloat currentWidth = newFrame.size.width;
|
||||
newFrame.size.width = width;
|
||||
newFrame.origin.x += currentWidth - width;
|
||||
self.frame = newFrame;
|
||||
|
||||
//old values for sizeToFit; keep these around for reference
|
||||
// newFrame.size.width = 77.0;
|
||||
// newFrame.size.height = 27.0;
|
||||
}
|
||||
|
||||
- (void)useLayerMasking
|
||||
{
|
||||
// turn of the manual clipping (done in toggleLayer's drawInContext:)
|
||||
self.toggleLayer.clip = NO;
|
||||
self.toggleLayer.drawOnTint = YES;
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
|
||||
// create the layer mask and add that to the toggleLayer
|
||||
self.clipLayer = [CAShapeLayer layer];
|
||||
UIBezierPath *clipPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
|
||||
cornerRadius:self.bounds.size.height / 2.0];
|
||||
self.clipLayer.path = clipPath.CGPath;
|
||||
self.toggleLayer.mask = self.clipLayer;
|
||||
}
|
||||
|
||||
- (void)removeLayerMask
|
||||
{
|
||||
// turn off the animations so the user doesn't see the changing of mask/clipping
|
||||
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
|
||||
|
||||
// remove the layer mask (put on in useLayerMasking)
|
||||
self.toggleLayer.mask = nil;
|
||||
|
||||
// renable manual clipping (done in toggleLayer's drawInContext:)
|
||||
self.toggleLayer.clip = YES;
|
||||
self.toggleLayer.drawOnTint = self.on;
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
}
|
||||
|
||||
- (void)positionLayersAndMask
|
||||
{
|
||||
// repositions the underlying toggle and the layer mask, plus the knob
|
||||
self.toggleLayer.mask.position = CGPointMake(-self.toggleLayer.frame.origin.x, 0.0);
|
||||
self.outlineLayer.frame = CGRectMake(-self.toggleLayer.frame.origin.x, 0, self.bounds.size.width, self.bounds.size.height);
|
||||
self.knobLayer.frame = CGRectMake(self.toggleLayer.frame.origin.x + self.toggleLayer.frame.size.width / 2.0 - self.knobLayer.frame.size.width / 2.0,
|
||||
-1,
|
||||
self.knobLayer.frame.size.width,
|
||||
self.knobLayer.frame.size.height);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark Interaction
|
||||
|
||||
- (void)tapped:(UITapGestureRecognizer *)gesture
|
||||
{
|
||||
if (self.ignoreTap) return;
|
||||
|
||||
if (gesture.state == UIGestureRecognizerStateEnded)
|
||||
[self setOn:!self.on animated:YES];
|
||||
}
|
||||
|
||||
- (void)toggleDragged:(UIPanGestureRecognizer *)gesture
|
||||
{
|
||||
CGFloat minToggleX = -self.toggleLayer.frame.size.width / 2.0 + self.toggleLayer.frame.size.height / 2.0;
|
||||
CGFloat maxToggleX = -1;
|
||||
|
||||
if (gesture.state == UIGestureRecognizerStateBegan)
|
||||
{
|
||||
// setup by turning off the manual clipping of the toggleLayer and setting up a layer mask.
|
||||
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
|
||||
[self useLayerMasking];
|
||||
[self positionLayersAndMask];
|
||||
self.knobLayer.gripped = YES;
|
||||
}
|
||||
else if (gesture.state == UIGestureRecognizerStateChanged)
|
||||
{
|
||||
CGPoint translation = [gesture translationInView:self];
|
||||
|
||||
// disable the animations before moving the layers
|
||||
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
|
||||
|
||||
// darken the knob
|
||||
if (!self.knobLayer.gripped)
|
||||
self.knobLayer.gripped = YES;
|
||||
|
||||
// move the toggleLayer using the translation of the gesture, keeping it inside the outline.
|
||||
CGFloat newX = self.toggleLayer.frame.origin.x + translation.x;
|
||||
if (newX < minToggleX) newX = minToggleX;
|
||||
if (newX > maxToggleX) newX = maxToggleX;
|
||||
self.toggleLayer.frame = CGRectMake(newX,
|
||||
self.toggleLayer.frame.origin.y,
|
||||
self.toggleLayer.frame.size.width,
|
||||
self.toggleLayer.frame.size.height);
|
||||
|
||||
// this will re-position the layer mask and knob
|
||||
[self positionLayersAndMask];
|
||||
|
||||
[gesture setTranslation:CGPointZero inView:self];
|
||||
}
|
||||
else if (gesture.state == UIGestureRecognizerStateEnded)
|
||||
{
|
||||
// flip the switch to on or off depending on which half it ends at
|
||||
CGFloat toggleCenter = CGRectGetMidX(self.toggleLayer.frame);
|
||||
[self setOn:(toggleCenter > CGRectGetMidX(self.bounds)) animated:YES];
|
||||
}
|
||||
|
||||
// send off the appropriate actions (not fully tested yet)
|
||||
CGPoint locationOfTouch = [gesture locationInView:self];
|
||||
if (CGRectContainsPoint(self.bounds, locationOfTouch))
|
||||
[self sendActionsForControlEvents:UIControlEventTouchDragInside];
|
||||
else
|
||||
[self sendActionsForControlEvents:UIControlEventTouchDragOutside];
|
||||
}
|
||||
|
||||
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
if (self.ignoreTap) return;
|
||||
|
||||
[super touchesBegan:touches withEvent:event];
|
||||
|
||||
self.knobLayer.gripped = YES;
|
||||
[self sendActionsForControlEvents:UIControlEventTouchDown];
|
||||
}
|
||||
|
||||
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
[super touchesEnded:touches withEvent:event];
|
||||
|
||||
[self sendActionsForControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
|
||||
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
[super touchesCancelled:touches withEvent:event];
|
||||
|
||||
[self sendActionsForControlEvents:UIControlEventTouchUpOutside];
|
||||
}
|
||||
|
||||
#pragma mark UIGestureRecognizerDelegate
|
||||
|
||||
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
|
||||
{
|
||||
return !self.ignoreTap;
|
||||
}
|
||||
|
||||
#pragma mark Setters/Getters
|
||||
|
||||
- (void)setOn:(BOOL)newOn
|
||||
{
|
||||
[self setOn:newOn animated:NO];
|
||||
}
|
||||
|
||||
- (void)setOn:(BOOL)newOn animated:(BOOL)animated
|
||||
{
|
||||
[self setOn:newOn animated:animated ignoreControlEvents:NO];
|
||||
}
|
||||
|
||||
- (void)setOn:(BOOL)newOn animated:(BOOL)animated ignoreControlEvents:(BOOL)ignoreControlEvents
|
||||
{
|
||||
BOOL previousOn = self.on;
|
||||
on = newOn;
|
||||
self.ignoreTap = YES;
|
||||
|
||||
[CATransaction setAnimationDuration:0.014];
|
||||
self.knobLayer.gripped = YES;
|
||||
|
||||
// setup by turning off the manual clipping of the toggleLayer and setting up a layer mask.
|
||||
[self useLayerMasking];
|
||||
[self positionLayersAndMask];
|
||||
|
||||
// retain all our targets so they don't disappear before the actions get sent at the end of the animation
|
||||
[[self allTargets] makeObjectsPerformSelector:@selector(retain)];
|
||||
|
||||
[CATransaction setCompletionBlock:^{
|
||||
[CATransaction begin];
|
||||
if (!animated)
|
||||
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
|
||||
else
|
||||
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
|
||||
|
||||
CGFloat minToggleX = -self.toggleLayer.frame.size.width / 2.0 + self.toggleLayer.frame.size.height / 2.0;
|
||||
CGFloat maxToggleX = -1;
|
||||
|
||||
|
||||
if (self.on)
|
||||
{
|
||||
self.toggleLayer.frame = CGRectMake(maxToggleX,
|
||||
self.toggleLayer.frame.origin.y,
|
||||
self.toggleLayer.frame.size.width,
|
||||
self.toggleLayer.frame.size.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
self.toggleLayer.frame = CGRectMake(minToggleX,
|
||||
self.toggleLayer.frame.origin.y,
|
||||
self.toggleLayer.frame.size.width,
|
||||
self.toggleLayer.frame.size.height);
|
||||
}
|
||||
|
||||
if (!self.toggleLayer.mask)
|
||||
{
|
||||
[self useLayerMasking];
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
}
|
||||
|
||||
[self positionLayersAndMask];
|
||||
|
||||
self.knobLayer.gripped = NO;
|
||||
|
||||
[CATransaction setCompletionBlock:^{
|
||||
[self removeLayerMask];
|
||||
self.ignoreTap = NO;
|
||||
|
||||
// send the action here so it get's sent at the end of the animations
|
||||
if (previousOn != on && !ignoreControlEvents)
|
||||
[self sendActionsForControlEvents:UIControlEventValueChanged];
|
||||
|
||||
[[self allTargets] makeObjectsPerformSelector:@selector(release)];
|
||||
}];
|
||||
|
||||
[CATransaction commit];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setOnTintColor:(UIColor *)anOnTintColor
|
||||
{
|
||||
if (anOnTintColor != onTintColor)
|
||||
{
|
||||
[onTintColor release];
|
||||
onTintColor = [anOnTintColor retain];
|
||||
self.toggleLayer.onTintColor = anOnTintColor;
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)layoutSubviews;
|
||||
{
|
||||
CGFloat knobRadius = self.bounds.size.height + 2.0;
|
||||
self.knobLayer.frame = CGRectMake(0, 0, knobRadius, knobRadius);
|
||||
CGSize toggleSize = CGSizeMake(self.bounds.size.width * 2 - (knobRadius - 4), self.bounds.size.height);
|
||||
CGFloat minToggleX = -toggleSize.width / 2.0 + knobRadius / 2.0 - 1;
|
||||
CGFloat maxToggleX = -1;
|
||||
|
||||
if (self.on)
|
||||
{
|
||||
self.toggleLayer.frame = CGRectMake(maxToggleX,
|
||||
self.toggleLayer.frame.origin.y,
|
||||
toggleSize.width,
|
||||
toggleSize.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
self.toggleLayer.frame = CGRectMake(minToggleX,
|
||||
self.toggleLayer.frame.origin.y,
|
||||
toggleSize.width,
|
||||
toggleSize.height);
|
||||
}
|
||||
|
||||
[self positionLayersAndMask];
|
||||
}
|
||||
|
||||
- (void)setOnText:(NSString *)newOnText
|
||||
{
|
||||
if (newOnText != onText)
|
||||
{
|
||||
[onText release];
|
||||
onText = [newOnText copy];
|
||||
self.toggleLayer.onString = onText;
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setOffText:(NSString *)newOffText
|
||||
{
|
||||
if (newOffText != offText)
|
||||
{
|
||||
[offText release];
|
||||
offText = [newOffText copy];
|
||||
self.toggleLayer.offString = offText;
|
||||
[self.toggleLayer setNeedsDisplay];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
18
Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.h
Executable file
18
Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.h
Executable file
|
|
@ -0,0 +1,18 @@
|
|||
//
|
||||
// DCRoundSwitchKnobLayer.h
|
||||
//
|
||||
// Created by Patrick Richards on 29/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
@interface DCRoundSwitchKnobLayer : CALayer
|
||||
|
||||
@property (nonatomic) BOOL gripped;
|
||||
|
||||
@end
|
||||
69
Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.m
Executable file
69
Classes/Utils/DCRoundSwitch/DCRoundSwitchKnobLayer.m
Executable file
|
|
@ -0,0 +1,69 @@
|
|||
//
|
||||
// DCRoundSwitchKnobLayer.m
|
||||
//
|
||||
// Created by Patrick Richards on 29/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import "DCRoundSwitchKnobLayer.h"
|
||||
|
||||
CGGradientRef CreateGradientRefWithColors(CGColorSpaceRef colorSpace, CGColorRef startColor, CGColorRef endColor);
|
||||
|
||||
@implementation DCRoundSwitchKnobLayer
|
||||
@synthesize gripped;
|
||||
|
||||
- (void)drawInContext:(CGContextRef)context
|
||||
{
|
||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
|
||||
CGRect knobRect = CGRectInset(self.bounds, 2, 2);
|
||||
CGFloat knobRadius = self.bounds.size.height - 2;
|
||||
|
||||
// knob outline (shadow is drawn in the toggle layer)
|
||||
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.62 alpha:1.0].CGColor);
|
||||
CGContextSetLineWidth(context, 1.5);
|
||||
CGContextStrokeEllipseInRect(context, knobRect);
|
||||
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 0, NULL);
|
||||
|
||||
// knob inner gradient
|
||||
CGContextAddEllipseInRect(context, knobRect);
|
||||
CGContextClip(context);
|
||||
CGColorRef knobStartColor = [UIColor colorWithWhite:0.82 alpha:1.0].CGColor;
|
||||
CGColorRef knobEndColor = (self.gripped) ? [UIColor colorWithWhite:0.894 alpha:1.0].CGColor : [UIColor colorWithWhite:0.996 alpha:1.0].CGColor;
|
||||
CGPoint topPoint = CGPointMake(0, 0);
|
||||
CGPoint bottomPoint = CGPointMake(0, knobRadius + 2);
|
||||
CGGradientRef knobGradient = CreateGradientRefWithColors(colorSpace, knobStartColor, knobEndColor);
|
||||
CGContextDrawLinearGradient(context, knobGradient, topPoint, bottomPoint, 0);
|
||||
CGGradientRelease(knobGradient);
|
||||
|
||||
// knob inner highlight
|
||||
CGContextAddEllipseInRect(context, CGRectInset(knobRect, 0.5, 0.5));
|
||||
CGContextAddEllipseInRect(context, CGRectInset(knobRect, 1.5, 1.5));
|
||||
CGContextEOClip(context);
|
||||
CGGradientRef knobHighlightGradient = CreateGradientRefWithColors(colorSpace, [UIColor whiteColor].CGColor, [UIColor colorWithWhite:1.0 alpha:0.5].CGColor);
|
||||
CGContextDrawLinearGradient(context, knobHighlightGradient, topPoint, bottomPoint, 0);
|
||||
CGGradientRelease(knobHighlightGradient);
|
||||
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
}
|
||||
|
||||
CGGradientRef CreateGradientRefWithColors(CGColorSpaceRef colorSpace, CGColorRef startColor, CGColorRef endColor)
|
||||
{
|
||||
CGFloat colorStops[2] = {0.0, 1.0};
|
||||
CGColorRef colors[] = {startColor, endColor};
|
||||
CFArrayRef colorsArray = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);
|
||||
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colorsArray, colorStops);
|
||||
CFRelease(colorsArray);
|
||||
return gradient;
|
||||
}
|
||||
|
||||
- (void)setGripped:(BOOL)newGripped
|
||||
{
|
||||
gripped = newGripped;
|
||||
[self setNeedsDisplay];
|
||||
}
|
||||
|
||||
@end
|
||||
16
Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.h
Executable file
16
Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.h
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
//
|
||||
// DCRoundSwitchOutlineLayer.h
|
||||
//
|
||||
// Created by Patrick Richards on 29/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
@interface DCRoundSwitchOutlineLayer : CALayer
|
||||
|
||||
@end
|
||||
66
Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m
Executable file
66
Classes/Utils/DCRoundSwitch/DCRoundSwitchOutlineLayer.m
Executable file
|
|
@ -0,0 +1,66 @@
|
|||
//
|
||||
// DCRoundSwitchOutlineLayer.m
|
||||
//
|
||||
// Created by Patrick Richards on 29/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import "DCRoundSwitchOutlineLayer.h"
|
||||
|
||||
@implementation DCRoundSwitchOutlineLayer
|
||||
|
||||
- (void)drawInContext:(CGContextRef)context
|
||||
{
|
||||
// calculate the outline clip
|
||||
CGContextSaveGState(context);
|
||||
UIBezierPath *switchOutline = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.bounds.size.height / 2.0];
|
||||
CGContextAddPath(context, switchOutline.CGPath);
|
||||
CGContextClip(context);
|
||||
|
||||
// inner gloss
|
||||
CGContextSaveGState(context);
|
||||
CGRect innerGlossPathRect = CGRectMake(self.frame.size.width * 0.05,
|
||||
self.frame.size.height / 2.0,
|
||||
self.bounds.size.width - (self.frame.size.width * 0.1),
|
||||
self.bounds.size.height / 2.0);
|
||||
UIBezierPath *innerGlossPath = [UIBezierPath bezierPathWithRoundedRect:innerGlossPathRect
|
||||
byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
|
||||
cornerRadii:CGSizeMake(self.bounds.size.height * 0.3, self.bounds.size.height * 0.3)];
|
||||
CGContextAddPath(context, innerGlossPath.CGPath);
|
||||
CGContextClip(context);
|
||||
|
||||
CGFloat colorStops[2] = {0.0, 1.0};
|
||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||
CGFloat innerGlossStartColorComponents[] = {1.0, 1.0, 1.0, 0.14};
|
||||
CGFloat innerGlossEndColorComponents[] = {1.0, 1.0, 1.0, 0.50};
|
||||
CGColorRef topColor = CGColorCreate(colorSpace, innerGlossStartColorComponents);
|
||||
CGColorRef bottomColor = CGColorCreate(colorSpace, innerGlossEndColorComponents);
|
||||
CGColorRef colors[] = { topColor, bottomColor };
|
||||
CFArrayRef colorsArray = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);
|
||||
CGGradientRef innerGlossGradient = CGGradientCreateWithColors(colorSpace, colorsArray, colorStops);
|
||||
CFRelease(colorsArray);
|
||||
|
||||
CGContextDrawLinearGradient(context, innerGlossGradient, CGPointMake(0, CGRectGetMinY(innerGlossPathRect)), CGPointMake(0, CGRectGetMaxY(innerGlossPathRect)), 0);
|
||||
CGContextRestoreGState(context);
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
CGColorRelease(topColor);
|
||||
CGColorRelease(bottomColor);
|
||||
CGGradientRelease(innerGlossGradient);
|
||||
|
||||
// outline and inner shadow
|
||||
CGContextSetShadowWithColor(context, CGSizeMake(0.0, 1), 2.0, [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1.0].CGColor);
|
||||
CGContextSetLineWidth(context, 0.5);
|
||||
UIBezierPath *outlinePath = [UIBezierPath bezierPathWithRoundedRect:CGRectOffset(self.bounds, -0.5, 0.0) cornerRadius:self.bounds.size.height / 2.0];
|
||||
CGContextAddPath(context, outlinePath.CGPath);
|
||||
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.60 alpha:1.0].CGColor);
|
||||
CGContextStrokePath(context);
|
||||
|
||||
CGContextAddPath(context, outlinePath.CGPath);
|
||||
CGContextStrokePath(context);
|
||||
}
|
||||
|
||||
@end
|
||||
26
Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.h
Executable file
26
Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.h
Executable file
|
|
@ -0,0 +1,26 @@
|
|||
//
|
||||
// DCRoundSwitchToggleLayer.h
|
||||
//
|
||||
// Created by Patrick Richards on 29/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
@interface DCRoundSwitchToggleLayer : CALayer
|
||||
|
||||
@property (nonatomic, retain) UIColor *onTintColor;
|
||||
@property (nonatomic, retain) NSString *onString;
|
||||
@property (nonatomic, retain) NSString *offString;
|
||||
@property (nonatomic, readonly) UIFont *labelFont;
|
||||
@property (nonatomic) BOOL drawOnTint;
|
||||
@property (nonatomic) BOOL clip;
|
||||
|
||||
- (id)initWithOnString:(NSString *)anOnString offString:(NSString *)anOffString onTintColor:(UIColor *)anOnTintColor;
|
||||
|
||||
@end
|
||||
102
Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.m
Executable file
102
Classes/Utils/DCRoundSwitch/DCRoundSwitchToggleLayer.m
Executable file
|
|
@ -0,0 +1,102 @@
|
|||
//
|
||||
// DCRoundSwitchToggleLayer.m
|
||||
//
|
||||
// Created by Patrick Richards on 29/06/11.
|
||||
// MIT License.
|
||||
//
|
||||
// http://twitter.com/patr
|
||||
// http://domesticcat.com.au/projects
|
||||
// http://github.com/domesticcatsoftware/DCRoundSwitch
|
||||
//
|
||||
|
||||
#import "DCRoundSwitchToggleLayer.h"
|
||||
|
||||
@implementation DCRoundSwitchToggleLayer
|
||||
@synthesize onString, offString, onTintColor;
|
||||
@synthesize drawOnTint;
|
||||
@synthesize clip;
|
||||
@synthesize labelFont;
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[onString release];
|
||||
[offString release];
|
||||
[onTintColor release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (id)initWithOnString:(NSString *)anOnString offString:(NSString *)anOffString onTintColor:(UIColor *)anOnTintColor
|
||||
{
|
||||
if ((self = [super init]))
|
||||
{
|
||||
self.onString = anOnString;
|
||||
self.offString = anOffString;
|
||||
self.onTintColor = anOnTintColor;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (UIFont *)labelFont
|
||||
{
|
||||
return [UIFont boldSystemFontOfSize:ceilf(self.bounds.size.height * .6)];
|
||||
}
|
||||
|
||||
- (void)drawInContext:(CGContextRef)context
|
||||
{
|
||||
CGFloat knobRadius = self.bounds.size.height - 2.0;
|
||||
CGFloat knobCenter = self.bounds.size.width / 2.0;
|
||||
CGRect knobRect = CGRectMake(knobCenter - knobRadius / 2.0, 1.0, knobRadius, knobRadius);
|
||||
|
||||
if (self.clip)
|
||||
{
|
||||
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(-self.frame.origin.x + 0.5, 0, self.bounds.size.width / 2.0 + self.bounds.size.height / 2.0 - 1.5, self.bounds.size.height) cornerRadius:self.bounds.size.height / 2.0];
|
||||
CGContextAddPath(context, bezierPath.CGPath);
|
||||
CGContextClip(context);
|
||||
}
|
||||
|
||||
// on tint color
|
||||
if (self.drawOnTint)
|
||||
{
|
||||
CGContextSetFillColorWithColor(context, self.onTintColor.CGColor);
|
||||
CGContextFillRect(context, CGRectMake(0, 0, knobCenter, self.bounds.size.height));
|
||||
}
|
||||
|
||||
// off tint color (white)
|
||||
CGContextSetFillColorWithColor(context, [UIColor colorWithWhite:0.963 alpha:1.0].CGColor);
|
||||
CGContextFillRect(context, CGRectMake(knobCenter, 0, self.bounds.size.width - knobCenter, self.bounds.size.height));
|
||||
|
||||
// knob shadow
|
||||
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 1.5, [UIColor colorWithWhite:0.2 alpha:1.0].CGColor);
|
||||
CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.42 alpha:1.0].CGColor);
|
||||
CGContextSetLineWidth(context, 1.0);
|
||||
CGContextStrokeEllipseInRect(context, knobRect);
|
||||
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), 0, NULL);
|
||||
|
||||
|
||||
// strings
|
||||
CGFloat textSpaceWidth = (self.bounds.size.width / 2) - (knobRadius / 2);
|
||||
|
||||
UIGraphicsPushContext(context);
|
||||
|
||||
// 'ON' state label (self.onString)
|
||||
CGSize onTextSize = [self.onString sizeWithFont:self.labelFont];
|
||||
CGPoint onTextPoint = CGPointMake((textSpaceWidth - onTextSize.width) / 2.0 + knobRadius * .15, floorf((self.bounds.size.height - onTextSize.height) / 2.0) + 1.0);
|
||||
[[UIColor colorWithWhite:0.45 alpha:1.0] set]; // .2 & .4
|
||||
[self.onString drawAtPoint:CGPointMake(onTextPoint.x, onTextPoint.y - 1.0) withFont:self.labelFont];
|
||||
[[UIColor whiteColor] set];
|
||||
[self.onString drawAtPoint:onTextPoint withFont:self.labelFont];
|
||||
|
||||
// 'OFF' state label (self.offString)
|
||||
CGSize offTextSize = [self.offString sizeWithFont:self.labelFont];
|
||||
CGPoint offTextPoint = CGPointMake(textSpaceWidth + (textSpaceWidth - offTextSize.width) / 2.0 + knobRadius * .86, floorf((self.bounds.size.height - offTextSize.height) / 2.0) + 1.0);
|
||||
[[UIColor whiteColor] set];
|
||||
[self.offString drawAtPoint:CGPointMake(offTextPoint.x, offTextPoint.y + 1.0) withFont:self.labelFont];
|
||||
[[UIColor colorWithWhite:0.52 alpha:1.0] set];
|
||||
[self.offString drawAtPoint:offTextPoint withFont:self.labelFont];
|
||||
|
||||
UIGraphicsPopContext();
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -604,36 +604,46 @@
|
|||
D37C639C15AADEF6009D0BAC /* ContactDetailsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37C639A15AADEF5009D0BAC /* ContactDetailsTableViewController.m */; };
|
||||
D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; };
|
||||
D37DC6C21594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */; };
|
||||
D37DC6ED1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */; };
|
||||
D37DC6EE1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */; };
|
||||
D37DC6EF1594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */; };
|
||||
D37DC6F01594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */; };
|
||||
D37DC6F11594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */; };
|
||||
D37DC6F21594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */; };
|
||||
D37DC6F31594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */; };
|
||||
D37DC6F41594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */; };
|
||||
D37DC6F51594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */; };
|
||||
D37DC6F61594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */; };
|
||||
D37DC6F71594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */; };
|
||||
D37DC6F81594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */; };
|
||||
D37DC6F91594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */; };
|
||||
D37DC6FA1594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */; };
|
||||
D37DC6FB1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */; };
|
||||
D37DC6FC1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */; };
|
||||
D37DC6FD1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */; };
|
||||
D37DC6FE1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */; };
|
||||
D37DC6FF1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */; };
|
||||
D37DC7001594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */; };
|
||||
D37DC7011594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */; };
|
||||
D37DC7021594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */; };
|
||||
D37DC7051594AE6F00B2A5EB /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */; };
|
||||
D37DC7061594AE6F00B2A5EB /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */; };
|
||||
D37DC7071594AE6F00B2A5EB /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */; };
|
||||
D37DC7081594AE6F00B2A5EB /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */; };
|
||||
D37DC7091594AE6F00B2A5EB /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */; };
|
||||
D37DC70A1594AE6F00B2A5EB /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */; };
|
||||
D37DC7181594AF3400B2A5EB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D37DC7171594AF3400B2A5EB /* MessageUI.framework */; };
|
||||
D37DC7191594AF3F00B2A5EB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D37DC7171594AF3400B2A5EB /* MessageUI.framework */; };
|
||||
D3807FBF15C28940005BE9BC /* DCRoundSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FB815C28940005BE9BC /* DCRoundSwitch.m */; };
|
||||
D3807FC015C28940005BE9BC /* DCRoundSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FB815C28940005BE9BC /* DCRoundSwitch.m */; };
|
||||
D3807FC115C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */; };
|
||||
D3807FC215C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */; };
|
||||
D3807FC315C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */; };
|
||||
D3807FC415C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */; };
|
||||
D3807FC515C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */; };
|
||||
D3807FC615C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */; };
|
||||
D3807FE815C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */; };
|
||||
D3807FE915C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */; };
|
||||
D3807FEA15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */; };
|
||||
D3807FEB15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */; };
|
||||
D3807FEC15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */; };
|
||||
D3807FED15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */; };
|
||||
D3807FEE15C2894A005BE9BC /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */; };
|
||||
D3807FEF15C2894A005BE9BC /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */; };
|
||||
D3807FF015C2894A005BE9BC /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */; };
|
||||
D3807FF115C2894A005BE9BC /* IASKSettingsStore.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */; };
|
||||
D3807FF215C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */; };
|
||||
D3807FF315C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */; };
|
||||
D3807FF415C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */; };
|
||||
D3807FF515C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */; };
|
||||
D3807FF615C2894A005BE9BC /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */; };
|
||||
D3807FF715C2894A005BE9BC /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */; };
|
||||
D3807FF815C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */; };
|
||||
D3807FF915C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */; };
|
||||
D3807FFA15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */; };
|
||||
D3807FFB15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */; };
|
||||
D3807FFC15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */; };
|
||||
D3807FFD15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */; };
|
||||
D3807FFE15C2894A005BE9BC /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE315C2894A005BE9BC /* IASKSlider.m */; };
|
||||
D3807FFF15C2894A005BE9BC /* IASKSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE315C2894A005BE9BC /* IASKSlider.m */; };
|
||||
D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE515C2894A005BE9BC /* IASKSwitch.m */; };
|
||||
D380800115C2894A005BE9BC /* IASKSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE515C2894A005BE9BC /* IASKSwitch.m */; };
|
||||
D380800215C2894A005BE9BC /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE715C2894A005BE9BC /* IASKTextField.m */; };
|
||||
D380800315C2894A005BE9BC /* IASKTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D3807FE715C2894A005BE9BC /* IASKTextField.m */; };
|
||||
D380800515C28A7A005BE9BC /* UILinphone.m in Sources */ = {isa = PBXBuildFile; fileRef = D380800415C28A7A005BE9BC /* UILinphone.m */; };
|
||||
D380800615C28A7A005BE9BC /* UILinphone.m in Sources */ = {isa = PBXBuildFile; fileRef = D380800415C28A7A005BE9BC /* UILinphone.m */; };
|
||||
D38327F31580FE3A00FA0D23 /* contacts_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327EB1580FE3A00FA0D23 /* contacts_default.png */; };
|
||||
D38327F41580FE3A00FA0D23 /* contacts_selected.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327EC1580FE3A00FA0D23 /* contacts_selected.png */; };
|
||||
D38327F51580FE3A00FA0D23 /* dialer_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D38327ED1580FE3A00FA0D23 /* dialer_default.png */; };
|
||||
|
|
@ -1354,36 +1364,45 @@
|
|||
D37C639A15AADEF5009D0BAC /* ContactDetailsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsTableViewController.m; sourceTree = "<group>"; };
|
||||
D37DC6BF1594AE1800B2A5EB /* LinphoneCoreSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinphoneCoreSettingsStore.h; sourceTree = "<group>"; };
|
||||
D37DC6C01594AE1800B2A5EB /* LinphoneCoreSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinphoneCoreSettingsStore.m; sourceTree = "<group>"; };
|
||||
D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKAppSettingsWebViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = "<group>"; };
|
||||
D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = "<group>"; };
|
||||
D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = "<group>"; };
|
||||
D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsReader.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = "<group>"; };
|
||||
D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = "<group>"; };
|
||||
D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = "<group>"; };
|
||||
D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = IASKSettingsStoreFile.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = "<group>"; };
|
||||
D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = "<group>"; };
|
||||
D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = "<group>"; };
|
||||
D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = "<group>"; };
|
||||
D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = "<group>"; };
|
||||
D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = "<group>"; };
|
||||
D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = "<group>"; };
|
||||
D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
|
||||
D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
|
||||
D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
|
||||
D37DC7171594AF3400B2A5EB /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
|
||||
D3807FB715C28940005BE9BC /* DCRoundSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitch.h; sourceTree = "<group>"; };
|
||||
D3807FB815C28940005BE9BC /* DCRoundSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitch.m; sourceTree = "<group>"; };
|
||||
D3807FB915C28940005BE9BC /* DCRoundSwitchKnobLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchKnobLayer.h; sourceTree = "<group>"; };
|
||||
D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchKnobLayer.m; sourceTree = "<group>"; };
|
||||
D3807FBB15C28940005BE9BC /* DCRoundSwitchOutlineLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchOutlineLayer.h; sourceTree = "<group>"; };
|
||||
D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchOutlineLayer.m; sourceTree = "<group>"; };
|
||||
D3807FBD15C28940005BE9BC /* DCRoundSwitchToggleLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCRoundSwitchToggleLayer.h; sourceTree = "<group>"; };
|
||||
D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCRoundSwitchToggleLayer.m; sourceTree = "<group>"; };
|
||||
D3807FC915C2894A005BE9BC /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
|
||||
D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; };
|
||||
D3807FCB15C2894A005BE9BC /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = "<group>"; };
|
||||
D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsWebViewController.m; sourceTree = "<group>"; };
|
||||
D3807FCD15C2894A005BE9BC /* IASKSpecifierValuesViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifierValuesViewController.h; sourceTree = "<group>"; };
|
||||
D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifierValuesViewController.m; sourceTree = "<group>"; };
|
||||
D3807FCF15C2894A005BE9BC /* IASKViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKViewController.h; sourceTree = "<group>"; };
|
||||
D3807FD115C2894A005BE9BC /* IASKSettingsReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsReader.h; sourceTree = "<group>"; };
|
||||
D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsReader.m; sourceTree = "<group>"; };
|
||||
D3807FD315C2894A005BE9BC /* IASKSettingsStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStore.h; sourceTree = "<group>"; };
|
||||
D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStore.m; sourceTree = "<group>"; };
|
||||
D3807FD515C2894A005BE9BC /* IASKSettingsStoreFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreFile.h; sourceTree = "<group>"; };
|
||||
D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreFile.m; sourceTree = "<group>"; };
|
||||
D3807FD715C2894A005BE9BC /* IASKSettingsStoreUserDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSettingsStoreUserDefaults.h; sourceTree = "<group>"; };
|
||||
D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSettingsStoreUserDefaults.m; sourceTree = "<group>"; };
|
||||
D3807FD915C2894A005BE9BC /* IASKSpecifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSpecifier.h; sourceTree = "<group>"; };
|
||||
D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSpecifier.m; sourceTree = "<group>"; };
|
||||
D3807FDC15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSSliderSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSSliderSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D3807FDE15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTextFieldSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTextFieldSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D3807FE015C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = "<group>"; };
|
||||
D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = "<group>"; };
|
||||
D3807FE215C2894A005BE9BC /* IASKSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSlider.h; sourceTree = "<group>"; };
|
||||
D3807FE315C2894A005BE9BC /* IASKSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSlider.m; sourceTree = "<group>"; };
|
||||
D3807FE415C2894A005BE9BC /* IASKSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKSwitch.h; sourceTree = "<group>"; };
|
||||
D3807FE515C2894A005BE9BC /* IASKSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKSwitch.m; sourceTree = "<group>"; };
|
||||
D3807FE615C2894A005BE9BC /* IASKTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKTextField.h; sourceTree = "<group>"; };
|
||||
D3807FE715C2894A005BE9BC /* IASKTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKTextField.m; sourceTree = "<group>"; };
|
||||
D380800415C28A7A005BE9BC /* UILinphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UILinphone.m; sourceTree = "<group>"; };
|
||||
D38327EB1580FE3A00FA0D23 /* contacts_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_default.png; path = Resources/contacts_default.png; sourceTree = "<group>"; };
|
||||
D38327EC1580FE3A00FA0D23 /* contacts_selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = contacts_selected.png; path = Resources/contacts_selected.png; sourceTree = "<group>"; };
|
||||
D38327ED1580FE3A00FA0D23 /* dialer_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = dialer_default.png; path = Resources/dialer_default.png; sourceTree = "<group>"; };
|
||||
|
|
@ -2040,6 +2059,7 @@
|
|||
D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */,
|
||||
D31AC4AF158A29C600C2638B /* UIHistoryCell.xib */,
|
||||
D3E84F3C15B018A600420DAC /* UILinphone.h */,
|
||||
D380800415C28A7A005BE9BC /* UILinphone.m */,
|
||||
D32409C1158B49A600C8C119 /* UILongTouchButton.h */,
|
||||
D32409C2158B49A600C8C119 /* UILongTouchButton.m */,
|
||||
D3ED3E841586291B006C0DE4 /* UIMainBar.h */,
|
||||
|
|
@ -2203,7 +2223,6 @@
|
|||
D389362A15A6D3C500A3A3AA /* NinePatch.xcodeproj */,
|
||||
080E96DDFE201D6D7F000001 /* Classes */,
|
||||
29B97323FDCFA39411CA2CEA /* Frameworks */,
|
||||
D37DC6C31594AE5600B2A5EB /* InAppSettingsKit */,
|
||||
220FAC77107654FC0068D98F /* include */,
|
||||
2214783B1386A2030020F8B8 /* Localizable.strings */,
|
||||
29B97315FDCFA39411CA2CEA /* Other Sources */,
|
||||
|
|
@ -2511,8 +2530,10 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
D38935F715A6D06800A3A3AA /* CPAnimation */,
|
||||
D3807FB615C28940005BE9BC /* DCRoundSwitch */,
|
||||
D32B9DFA15A2F131000B6DEC /* FastAddressBook.h */,
|
||||
D32B9DFB15A2F131000B6DEC /* FastAddressBook.m */,
|
||||
D3807FC715C2894A005BE9BC /* InAppSettingsKit */,
|
||||
D326483615887D5200930C67 /* OrderedDictionary.h */,
|
||||
D326483715887D5200930C67 /* OrderedDictionary.m */,
|
||||
D3F9A9DD15AF0FFE0045320F /* TPKeyboardAvoiding */,
|
||||
|
|
@ -2533,67 +2554,81 @@
|
|||
name = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6C31594AE5600B2A5EB /* InAppSettingsKit */ = {
|
||||
D3807FB615C28940005BE9BC /* DCRoundSwitch */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6C41594AE6F00B2A5EB /* Controllers */,
|
||||
D37DC6CC1594AE6F00B2A5EB /* Models */,
|
||||
D37DC6D71594AE6F00B2A5EB /* Views */,
|
||||
D3807FB715C28940005BE9BC /* DCRoundSwitch.h */,
|
||||
D3807FB815C28940005BE9BC /* DCRoundSwitch.m */,
|
||||
D3807FB915C28940005BE9BC /* DCRoundSwitchKnobLayer.h */,
|
||||
D3807FBA15C28940005BE9BC /* DCRoundSwitchKnobLayer.m */,
|
||||
D3807FBB15C28940005BE9BC /* DCRoundSwitchOutlineLayer.h */,
|
||||
D3807FBC15C28940005BE9BC /* DCRoundSwitchOutlineLayer.m */,
|
||||
D3807FBD15C28940005BE9BC /* DCRoundSwitchToggleLayer.h */,
|
||||
D3807FBE15C28940005BE9BC /* DCRoundSwitchToggleLayer.m */,
|
||||
);
|
||||
name = DCRoundSwitch;
|
||||
path = Utils/DCRoundSwitch;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D3807FC715C2894A005BE9BC /* InAppSettingsKit */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D3807FC815C2894A005BE9BC /* Controllers */,
|
||||
D3807FD015C2894A005BE9BC /* Models */,
|
||||
D3807FDB15C2894A005BE9BC /* Views */,
|
||||
);
|
||||
name = InAppSettingsKit;
|
||||
path = Utils/InAppSettingsKit;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6C41594AE6F00B2A5EB /* Controllers */ = {
|
||||
D3807FC815C2894A005BE9BC /* Controllers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6C51594AE6F00B2A5EB /* IASKAppSettingsViewController.h */,
|
||||
D37DC6C61594AE6F00B2A5EB /* IASKAppSettingsViewController.m */,
|
||||
D37DC6C71594AE6F00B2A5EB /* IASKAppSettingsWebViewController.h */,
|
||||
D37DC6C81594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m */,
|
||||
D37DC6C91594AE6F00B2A5EB /* IASKSpecifierValuesViewController.h */,
|
||||
D37DC6CA1594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m */,
|
||||
D37DC6CB1594AE6F00B2A5EB /* IASKViewController.h */,
|
||||
D3807FC915C2894A005BE9BC /* IASKAppSettingsViewController.h */,
|
||||
D3807FCA15C2894A005BE9BC /* IASKAppSettingsViewController.m */,
|
||||
D3807FCB15C2894A005BE9BC /* IASKAppSettingsWebViewController.h */,
|
||||
D3807FCC15C2894A005BE9BC /* IASKAppSettingsWebViewController.m */,
|
||||
D3807FCD15C2894A005BE9BC /* IASKSpecifierValuesViewController.h */,
|
||||
D3807FCE15C2894A005BE9BC /* IASKSpecifierValuesViewController.m */,
|
||||
D3807FCF15C2894A005BE9BC /* IASKViewController.h */,
|
||||
);
|
||||
name = Controllers;
|
||||
path = InAppSettingsKit/Controllers;
|
||||
path = Controllers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6CC1594AE6F00B2A5EB /* Models */ = {
|
||||
D3807FD015C2894A005BE9BC /* Models */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6CD1594AE6F00B2A5EB /* IASKSettingsReader.h */,
|
||||
D37DC6CE1594AE6F00B2A5EB /* IASKSettingsReader.m */,
|
||||
D37DC6CF1594AE6F00B2A5EB /* IASKSettingsStore.h */,
|
||||
D37DC6D01594AE6F00B2A5EB /* IASKSettingsStore.m */,
|
||||
D37DC6D11594AE6F00B2A5EB /* IASKSettingsStoreFile.h */,
|
||||
D37DC6D21594AE6F00B2A5EB /* IASKSettingsStoreFile.m */,
|
||||
D37DC6D31594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.h */,
|
||||
D37DC6D41594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m */,
|
||||
D37DC6D51594AE6F00B2A5EB /* IASKSpecifier.h */,
|
||||
D37DC6D61594AE6F00B2A5EB /* IASKSpecifier.m */,
|
||||
D3807FD115C2894A005BE9BC /* IASKSettingsReader.h */,
|
||||
D3807FD215C2894A005BE9BC /* IASKSettingsReader.m */,
|
||||
D3807FD315C2894A005BE9BC /* IASKSettingsStore.h */,
|
||||
D3807FD415C2894A005BE9BC /* IASKSettingsStore.m */,
|
||||
D3807FD515C2894A005BE9BC /* IASKSettingsStoreFile.h */,
|
||||
D3807FD615C2894A005BE9BC /* IASKSettingsStoreFile.m */,
|
||||
D3807FD715C2894A005BE9BC /* IASKSettingsStoreUserDefaults.h */,
|
||||
D3807FD815C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m */,
|
||||
D3807FD915C2894A005BE9BC /* IASKSpecifier.h */,
|
||||
D3807FDA15C2894A005BE9BC /* IASKSpecifier.m */,
|
||||
);
|
||||
name = Models;
|
||||
path = InAppSettingsKit/Models;
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D37DC6D71594AE6F00B2A5EB /* Views */ = {
|
||||
D3807FDB15C2894A005BE9BC /* Views */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D37DC6D81594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.h */,
|
||||
D37DC6D91594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m */,
|
||||
D37DC6DA1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.h */,
|
||||
D37DC6DB1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m */,
|
||||
D37DC6DC1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.h */,
|
||||
D37DC6DD1594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m */,
|
||||
D37DC6E01594AE6F00B2A5EB /* IASKSlider.h */,
|
||||
D37DC6E11594AE6F00B2A5EB /* IASKSlider.m */,
|
||||
D37DC6E21594AE6F00B2A5EB /* IASKSwitch.h */,
|
||||
D37DC6E31594AE6F00B2A5EB /* IASKSwitch.m */,
|
||||
D37DC6E41594AE6F00B2A5EB /* IASKTextField.h */,
|
||||
D37DC6E51594AE6F00B2A5EB /* IASKTextField.m */,
|
||||
D3807FDC15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.h */,
|
||||
D3807FDD15C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m */,
|
||||
D3807FDE15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.h */,
|
||||
D3807FDF15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m */,
|
||||
D3807FE015C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.h */,
|
||||
D3807FE115C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m */,
|
||||
D3807FE215C2894A005BE9BC /* IASKSlider.h */,
|
||||
D3807FE315C2894A005BE9BC /* IASKSlider.m */,
|
||||
D3807FE415C2894A005BE9BC /* IASKSwitch.h */,
|
||||
D3807FE515C2894A005BE9BC /* IASKSwitch.m */,
|
||||
D3807FE615C2894A005BE9BC /* IASKTextField.h */,
|
||||
D3807FE715C2894A005BE9BC /* IASKTextField.m */,
|
||||
);
|
||||
name = Views;
|
||||
path = InAppSettingsKit/Views;
|
||||
path = Views;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D38935F715A6D06800A3A3AA /* CPAnimation */ = {
|
||||
|
|
@ -3395,20 +3430,6 @@
|
|||
D35E7597159460580066B1C1 /* ChatViewController.m in Sources */,
|
||||
D35E759F159460B70066B1C1 /* SettingsViewController.m in Sources */,
|
||||
D37DC6C11594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */,
|
||||
D37DC6ED1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */,
|
||||
D37DC6EF1594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */,
|
||||
D37DC6F11594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */,
|
||||
D37DC6F31594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */,
|
||||
D37DC6F51594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */,
|
||||
D37DC6F71594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */,
|
||||
D37DC6F91594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D37DC6FB1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */,
|
||||
D37DC6FD1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D37DC6FF1594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D37DC7011594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D37DC7051594AE6F00B2A5EB /* IASKSlider.m in Sources */,
|
||||
D37DC7071594AE6F00B2A5EB /* IASKSwitch.m in Sources */,
|
||||
D37DC7091594AE6F00B2A5EB /* IASKTextField.m in Sources */,
|
||||
D3EA53FD159850E80037DC6B /* LinphoneManager.m in Sources */,
|
||||
D3EA540D1598528B0037DC6B /* ChatTableViewController.m in Sources */,
|
||||
D3EA5411159853750037DC6B /* UIChatCell.m in Sources */,
|
||||
|
|
@ -3440,6 +3461,25 @@
|
|||
D3F9A9EE15AF277E0045320F /* UACellBackgroundView.m in Sources */,
|
||||
D35860D615B549B500513429 /* Utils.m in Sources */,
|
||||
D3F7998115BD32370018C273 /* TPMultiLayoutViewController.m in Sources */,
|
||||
D3807FBF15C28940005BE9BC /* DCRoundSwitch.m in Sources */,
|
||||
D3807FC115C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */,
|
||||
D3807FC315C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */,
|
||||
D3807FC515C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */,
|
||||
D3807FE815C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */,
|
||||
D3807FEA15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */,
|
||||
D3807FEC15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */,
|
||||
D3807FEE15C2894A005BE9BC /* IASKSettingsReader.m in Sources */,
|
||||
D3807FF015C2894A005BE9BC /* IASKSettingsStore.m in Sources */,
|
||||
D3807FF215C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */,
|
||||
D3807FF415C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D3807FF615C2894A005BE9BC /* IASKSpecifier.m in Sources */,
|
||||
D3807FF815C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D3807FFA15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D3807FFC15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D3807FFE15C2894A005BE9BC /* IASKSlider.m in Sources */,
|
||||
D380800015C2894A005BE9BC /* IASKSwitch.m in Sources */,
|
||||
D380800215C2894A005BE9BC /* IASKTextField.m in Sources */,
|
||||
D380800515C28A7A005BE9BC /* UILinphone.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -3484,20 +3524,6 @@
|
|||
D35E7598159460580066B1C1 /* ChatViewController.m in Sources */,
|
||||
D35E75A0159460B70066B1C1 /* SettingsViewController.m in Sources */,
|
||||
D37DC6C21594AE1800B2A5EB /* LinphoneCoreSettingsStore.m in Sources */,
|
||||
D37DC6EE1594AE6F00B2A5EB /* IASKAppSettingsViewController.m in Sources */,
|
||||
D37DC6F01594AE6F00B2A5EB /* IASKAppSettingsWebViewController.m in Sources */,
|
||||
D37DC6F21594AE6F00B2A5EB /* IASKSpecifierValuesViewController.m in Sources */,
|
||||
D37DC6F41594AE6F00B2A5EB /* IASKSettingsReader.m in Sources */,
|
||||
D37DC6F61594AE6F00B2A5EB /* IASKSettingsStore.m in Sources */,
|
||||
D37DC6F81594AE6F00B2A5EB /* IASKSettingsStoreFile.m in Sources */,
|
||||
D37DC6FA1594AE6F00B2A5EB /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D37DC6FC1594AE6F00B2A5EB /* IASKSpecifier.m in Sources */,
|
||||
D37DC6FE1594AE6F00B2A5EB /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D37DC7001594AE6F00B2A5EB /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D37DC7021594AE6F00B2A5EB /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D37DC7061594AE6F00B2A5EB /* IASKSlider.m in Sources */,
|
||||
D37DC7081594AE6F00B2A5EB /* IASKSwitch.m in Sources */,
|
||||
D37DC70A1594AE6F00B2A5EB /* IASKTextField.m in Sources */,
|
||||
D3EA53FE159850E80037DC6B /* LinphoneManager.m in Sources */,
|
||||
D3EA540E1598528B0037DC6B /* ChatTableViewController.m in Sources */,
|
||||
D3EA5412159853750037DC6B /* UIChatCell.m in Sources */,
|
||||
|
|
@ -3529,6 +3555,25 @@
|
|||
D3F9A9EF15AF277E0045320F /* UACellBackgroundView.m in Sources */,
|
||||
D35860D715B549B500513429 /* Utils.m in Sources */,
|
||||
D3F7998215BD32370018C273 /* TPMultiLayoutViewController.m in Sources */,
|
||||
D3807FC015C28940005BE9BC /* DCRoundSwitch.m in Sources */,
|
||||
D3807FC215C28940005BE9BC /* DCRoundSwitchKnobLayer.m in Sources */,
|
||||
D3807FC415C28940005BE9BC /* DCRoundSwitchOutlineLayer.m in Sources */,
|
||||
D3807FC615C28940005BE9BC /* DCRoundSwitchToggleLayer.m in Sources */,
|
||||
D3807FE915C2894A005BE9BC /* IASKAppSettingsViewController.m in Sources */,
|
||||
D3807FEB15C2894A005BE9BC /* IASKAppSettingsWebViewController.m in Sources */,
|
||||
D3807FED15C2894A005BE9BC /* IASKSpecifierValuesViewController.m in Sources */,
|
||||
D3807FEF15C2894A005BE9BC /* IASKSettingsReader.m in Sources */,
|
||||
D3807FF115C2894A005BE9BC /* IASKSettingsStore.m in Sources */,
|
||||
D3807FF315C2894A005BE9BC /* IASKSettingsStoreFile.m in Sources */,
|
||||
D3807FF515C2894A005BE9BC /* IASKSettingsStoreUserDefaults.m in Sources */,
|
||||
D3807FF715C2894A005BE9BC /* IASKSpecifier.m in Sources */,
|
||||
D3807FF915C2894A005BE9BC /* IASKPSSliderSpecifierViewCell.m in Sources */,
|
||||
D3807FFB15C2894A005BE9BC /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
|
||||
D3807FFD15C2894A005BE9BC /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
|
||||
D3807FFF15C2894A005BE9BC /* IASKSlider.m in Sources */,
|
||||
D380800115C2894A005BE9BC /* IASKSwitch.m in Sources */,
|
||||
D380800315C2894A005BE9BC /* IASKTextField.m in Sources */,
|
||||
D380800615C28A7A005BE9BC /* UILinphone.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue