- Inizio lavoro su animazioni
This commit is contained in:
parent
967bf95336
commit
7a34b09ccf
@ -11,14 +11,14 @@
|
||||
|
||||
@class TabBarItem;
|
||||
|
||||
@protocol TabBarItemDelegate <NSObject>
|
||||
/*@protocol TabBarItemDelegate <NSObject>
|
||||
|
||||
@required
|
||||
|
||||
- (void) tabBarItemSelected:(TabBarItem*) selectedItem;
|
||||
|
||||
@end
|
||||
|
||||
*/
|
||||
@interface TabBarItem : UIView
|
||||
|
||||
/**
|
||||
@ -37,10 +37,8 @@
|
||||
* Represents the sub items that appeare when you select the item in picker.
|
||||
*/
|
||||
@property (nonatomic, strong) NSMutableArray *subItems;
|
||||
/**
|
||||
* <#Description#>
|
||||
*/
|
||||
@property (nonatomic, assign) id<TabBarItemDelegate> delegate;
|
||||
|
||||
//@property (nonatomic, assign) id<TabBarItemDelegate> delegate;
|
||||
|
||||
/**
|
||||
* <#Description#>
|
||||
|
||||
@ -25,12 +25,9 @@ typedef NS_ENUM(NSInteger, TabBarPickerPosition) {
|
||||
@property (nonatomic, readonly) CGSize tabBarSize;
|
||||
@property (nonatomic, readonly) TabBarPickerPosition position;
|
||||
@property (nonatomic, readonly) NSLayoutRelation layoutRelation;
|
||||
@property (nonatomic) NSUInteger subItemPerRow;
|
||||
@property (nonatomic) CGFloat paddingLeft;
|
||||
@property (nonatomic) CGFloat paddingRight;
|
||||
@property (nonatomic) CGFloat paddingTop;
|
||||
@property (nonatomic) CGFloat paddingBottom;
|
||||
@property (nonatomic) CGFloat itemSpacing;
|
||||
@property (nonatomic, readonly) NSUInteger subItemPerRow;
|
||||
@property (nonatomic, readonly) CGFloat subItemHeight;
|
||||
|
||||
/**
|
||||
* Init TabBarPicker with items. When is selected an item the picher show down subitems.
|
||||
@ -115,6 +112,31 @@ typedef NS_ENUM(NSInteger, TabBarPickerPosition) {
|
||||
*/
|
||||
- (instancetype) initWithTabBarItems:(NSArray*) items withTabBarSize:(CGSize) size forPosition:(TabBarPickerPosition) position andNSLayoutRelation:(NSLayoutRelation) relation subItemsPerRow:(NSUInteger) subItemsPerRow;
|
||||
|
||||
/**
|
||||
* Init TabBarPicker with items. When is selected an item the picher show down subitems.
|
||||
* By default when one of more subItems are selected the selected item become selected.
|
||||
* The picker size is dinamically based the max subitems of items
|
||||
*
|
||||
* @param items Represents tab bar items. That array cannot be nil.
|
||||
*
|
||||
* @param size Represents the tabbar size
|
||||
*
|
||||
* @param position Represents the posizion in the Screen:
|
||||
* - TabBarPickerPositionLeft : Is positioned in vertical on left of the screen and shows the picker at its right
|
||||
* - TabBarPickerPositionRight : Is positioned in vertical on right of the screen and shows the picker at its left
|
||||
* - TabBarPickerPositionBottom : Is positioned in horizontal on bottom of the screen and shows the picker at its top
|
||||
* - TabBarPickerPositionTop : Is positioned in horizontal on top of the screen and shows the picker at its bottom
|
||||
*
|
||||
* @param relation Represents NSLayoutRelation for TabBar layout.
|
||||
*
|
||||
* @param subItemsPerRow Represents the number of subItems per single row of subitem picker
|
||||
*
|
||||
* @param subItemHeight Represents the height of single subItem.
|
||||
*
|
||||
* @return <#return value description#>
|
||||
*/
|
||||
- (instancetype) initWithTabBarItems:(NSArray*) items withTabBarSize:(CGSize) size forPosition:(TabBarPickerPosition) position andNSLayoutRelation:(NSLayoutRelation) relation subItemsPerRow:(NSUInteger) subItemsPerRow subItemHeight:(CGFloat) subItemHeight;
|
||||
|
||||
/**
|
||||
* <#Description#>
|
||||
*
|
||||
|
||||
@ -11,12 +11,14 @@
|
||||
#import "TabBarPickerSubItemsView.h"
|
||||
|
||||
#define DEFAULT_SUB_ITEMS_PER_ROW 2
|
||||
#define DEFAULT_SUB_ITEM_HEIGHT 44
|
||||
|
||||
@interface TabBarPicker() <TabBarItemDelegate>
|
||||
@interface TabBarPicker() <TabBarPickerSubItemsViewDelegate>
|
||||
|
||||
@property (nonatomic) UIDeviceOrientation orientation;
|
||||
@property (nonatomic) NSUInteger subItemRows;
|
||||
@property (nonatomic, strong) TabBarPickerSubItemsView *subItemSelector;
|
||||
@property (nonatomic) BOOL show;
|
||||
|
||||
@end
|
||||
|
||||
@ -24,34 +26,36 @@
|
||||
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items forPosition:(TabBarPickerPosition) position {
|
||||
|
||||
return [self initWithTabBarItems:items withTabBarSize:CGSizeZero forPosition:position andNSLayoutRelation:NSLayoutRelationEqual subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW];
|
||||
return [self initWithTabBarItems:items withTabBarSize:CGSizeZero forPosition:position andNSLayoutRelation:NSLayoutRelationEqual subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW subItemHeight:DEFAULT_SUB_ITEM_HEIGHT];
|
||||
|
||||
}
|
||||
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items forPosition:(TabBarPickerPosition) position andNSLayoutRelation:(NSLayoutRelation) relation {
|
||||
|
||||
return [self initWithTabBarItems:items withTabBarSize:CGSizeZero forPosition:position andNSLayoutRelation:relation subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW];
|
||||
return [self initWithTabBarItems:items withTabBarSize:CGSizeZero forPosition:position andNSLayoutRelation:relation subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW subItemHeight:DEFAULT_SUB_ITEM_HEIGHT];
|
||||
|
||||
}
|
||||
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items withTabBarSize:(CGSize) size forPosition:(TabBarPickerPosition) position andNSLayoutRelation:(NSLayoutRelation) relation {
|
||||
|
||||
return [self initWithTabBarItems:items withTabBarSize:size forPosition:position andNSLayoutRelation:relation subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW];
|
||||
|
||||
return [self initWithTabBarItems:items withTabBarSize:size forPosition:position andNSLayoutRelation:relation subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW subItemHeight:DEFAULT_SUB_ITEM_HEIGHT];
|
||||
}
|
||||
|
||||
- (instancetype) initWithTabBarItems:(NSArray*) items withTabBarSize:(CGSize) size forPosition:(TabBarPickerPosition) position andNSLayoutRelation:(NSLayoutRelation) relation subItemsPerRow:(NSUInteger) subItemsPerRow {
|
||||
|
||||
return [self initWithTabBarItems:items withTabBarSize:size forPosition:position andNSLayoutRelation:relation subItemsPerRow:DEFAULT_SUB_ITEMS_PER_ROW subItemHeight:DEFAULT_SUB_ITEM_HEIGHT];
|
||||
}
|
||||
|
||||
|
||||
|
||||
- (instancetype) initWithTabBarItems:(NSArray*) items withTabBarSize:(CGSize) size forPosition:(TabBarPickerPosition) position andNSLayoutRelation:(NSLayoutRelation) relation subItemsPerRow:(NSUInteger) subItemsPerRow subItemHeight:(CGFloat) subItemHeight {
|
||||
|
||||
self = [self initForAutoLayout];
|
||||
if (self) {
|
||||
_subItemPerRow = subItemsPerRow;
|
||||
_itemSpacing = 10;
|
||||
_paddingLeft = 0;
|
||||
_paddingRight = 0;
|
||||
_paddingTop = 0;
|
||||
_paddingBottom = 0;
|
||||
_layoutRelation = relation;
|
||||
|
||||
_subItemHeight = subItemHeight;
|
||||
_position = position;
|
||||
|
||||
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
|
||||
@ -72,8 +76,8 @@
|
||||
|
||||
if ([_tabBarItems count] > 0) {
|
||||
|
||||
_subItemSelector = [[TabBarPickerSubItemsView alloc] initWithTabBarItems:_tabBarItems];
|
||||
|
||||
_subItemSelector = [[TabBarPickerSubItemsView alloc] initWithTabBarItems:_tabBarItems andsubItemsPerRow:_subItemPerRow];
|
||||
[_subItemSelector setDelegate:self];
|
||||
[self addSubview:_subItemSelector];
|
||||
}
|
||||
}
|
||||
@ -88,7 +92,7 @@
|
||||
if ([self.constraints count] > 0) {
|
||||
|
||||
[NSLayoutConstraint deactivateConstraints:self.constraints];
|
||||
|
||||
[NSLayoutConstraint deactivateConstraints:_subItemSelector.constraints];
|
||||
for (TabBarItem *item in _tabBarItems) {
|
||||
[item.constraints autoRemoveConstraints];
|
||||
}
|
||||
@ -138,7 +142,10 @@
|
||||
break;
|
||||
case TabBarPickerPositionBottom:
|
||||
default:{
|
||||
if (!_show) {
|
||||
|
||||
}
|
||||
else {
|
||||
[self autoPinEdgeToSuperviewMargin:ALEdgeBottom];
|
||||
[self autoSetDimension:ALDimensionHeight toSize:44];
|
||||
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:_layoutRelation];
|
||||
@ -150,12 +157,17 @@
|
||||
|
||||
[_tabBarItems autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES];
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
[self updateConstraintsIfNeeded];
|
||||
|
||||
[_subItemSelector layoutSubviews];
|
||||
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
[self show];
|
||||
});
|
||||
}
|
||||
|
||||
- (void) setPosition:(TabBarPickerPosition)position {
|
||||
@ -175,7 +187,7 @@
|
||||
if (item && [item isKindOfClass:[TabBarItem class]]) {
|
||||
|
||||
[_tabBarItems addObject:item];
|
||||
[item setDelegate:self];
|
||||
//[item setDelegate:self];
|
||||
[self addSubview:item];
|
||||
|
||||
|
||||
@ -186,12 +198,37 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void) layoutSubviewsPortrait {
|
||||
- (void) show {
|
||||
|
||||
if (!_show) {
|
||||
|
||||
_show = YES;
|
||||
[self setNeedsUpdateConstraints];
|
||||
[self updateConstraintsIfNeeded];
|
||||
|
||||
[UIView animateWithDuration:1.0
|
||||
delay:0.0
|
||||
options:UIViewAnimationOptionCurveEaseInOut
|
||||
animations:^{
|
||||
[self layoutIfNeeded]; // this is what actually causes the views to animate to their new layout
|
||||
}
|
||||
completion:^(BOOL finished) {
|
||||
// Run the animation again in the other direction
|
||||
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) hide {
|
||||
|
||||
}
|
||||
|
||||
- (void) layoutSubviewsLandScape {
|
||||
#pragma mark TabBarPickerSubItemsViewDelegate
|
||||
|
||||
- (void) tabarPickerSubItemsView:(TabBarPickerSubItemsView*) tabarPickerSubItemsView didSelect:(TabBarItem*) item {
|
||||
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
@end
|
||||
|
||||
@ -29,15 +29,16 @@
|
||||
/**
|
||||
* <#Description#>
|
||||
*/
|
||||
@property (nonatomic, assign) id<TabBarItemDelegate> delegate;
|
||||
@property (nonatomic, assign) id<TabBarPickerSubItemsViewDelegate> delegate;
|
||||
|
||||
/**
|
||||
* <#Description#>
|
||||
*
|
||||
* @param items <#items description#>
|
||||
* @param itemsPerRow <#itemsPerRow description#>
|
||||
*
|
||||
* @return <#return value description#>
|
||||
*/
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items;
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items andsubItemsPerRow:(NSUInteger) itemsPerRow;
|
||||
|
||||
@end
|
||||
|
||||
@ -9,13 +9,37 @@
|
||||
#import "TabBarPickerSubItemsView.h"
|
||||
#import <PureLayout/PureLayout.h>
|
||||
|
||||
@interface TabBarPickerSubItemsView()
|
||||
|
||||
@property (nonatomic) NSUInteger itemsPerRow;
|
||||
@property (nonatomic) NSUInteger rows;
|
||||
@property (nonatomic, strong) UICollectionView *subItemCollectionView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation TabBarPickerSubItemsView
|
||||
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items {
|
||||
- (instancetype) initWithTabBarItems:(NSArray *) items andsubItemsPerRow:(NSUInteger) itemsPerRow {
|
||||
self = [self initForAutoLayout];
|
||||
|
||||
if (self) {
|
||||
_itemsPerRow = itemsPerRow;
|
||||
_itemsArray = [[NSMutableArray alloc] initWithArray:items];
|
||||
|
||||
_rows = 0;
|
||||
|
||||
for (TabBarItem *item in _itemsArray) {
|
||||
if (_rows < ([[item subItems] count]/_itemsPerRow)) {
|
||||
_rows = ceil(([[item subItems] count]/_itemsPerRow));
|
||||
}
|
||||
}
|
||||
[self setBackgroundColor:[UIColor whiteColor]];
|
||||
/*_subItemCollectionView = [[UICollectionView alloc] initForAutoLayout];
|
||||
[_subItemCollectionView setPagingEnabled:YES];
|
||||
[_subItemCollectionView setDelegate:self];
|
||||
[_subItemCollectionView setDataSource:self];
|
||||
|
||||
[self addSubview:_subItemCollectionView];*/
|
||||
}
|
||||
|
||||
[self updateConstraintsIfNeeded];
|
||||
@ -36,11 +60,13 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:NSLayoutRelationEqual];
|
||||
[self autoSetDimension:ALDimensionHeight toSize:44];
|
||||
|
||||
[self autoConstrainAttribute:ALEdgeTop toAttribute:ALMarginTop ofView:self.superview withOffset:self.superview.frame.size.height];
|
||||
[self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:NSLayoutRelationEqual];
|
||||
[self autoSetDimension:ALDimensionHeight toSize:_rows*44];
|
||||
|
||||
[_subItemCollectionView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self];
|
||||
[_subItemCollectionView autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self];
|
||||
[_subItemCollectionView setBackgroundColor:[UIColor redColor]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
@interface TabBarSubItem : UIView
|
||||
|
||||
@property (nonatomic, strong) NSString *name;
|
||||
@property (nonatomic, strong) UIButton *subItemButton;
|
||||
|
||||
+ (instancetype) tabBarSubItemWithName:(NSString*)name;
|
||||
|
||||
|
||||
@ -26,6 +26,9 @@
|
||||
[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil];
|
||||
|
||||
_name = name;
|
||||
|
||||
_subItemButton = [[UIButton alloc] initForAutoLayout];
|
||||
[_subItemButton setTitle:_name forState:UIControlStateNormal];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@ -34,6 +37,11 @@
|
||||
return [[self alloc] initWithName:name];
|
||||
}
|
||||
|
||||
- (void) setName:(NSString *)name {
|
||||
_name = name;
|
||||
[_subItemButton setTitle:name forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
|
||||
- (void)deviceOrientationDidChange:(NSNotification *)notification {
|
||||
//Obtain current device orientation
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user