You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
240 lines
8.8 KiB
240 lines
8.8 KiB
// |
|
// XHShareMenuView.m |
|
// MessageDisplayExample |
|
// |
|
// Created by HUAJIE-1 on 14-5-1. |
|
// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. |
|
// |
|
|
|
#import "XHShareMenuView.h" |
|
#import "XHMacro.h" |
|
|
|
// 每行有4个 |
|
#define kXHShareMenuPerRowItemCount (kIsiPad ? 10 : 4) |
|
#define kXHShareMenuPerColum 2 |
|
|
|
@interface XHShareMenuItemView : UIView |
|
|
|
/** |
|
* 第三方按钮 |
|
*/ |
|
@property (nonatomic, weak) UIButton *shareMenuItemButton; |
|
/** |
|
* 第三方按钮的标题 |
|
*/ |
|
@property (nonatomic, weak) UILabel *shareMenuItemTitleLabel; |
|
|
|
/** |
|
* 配置默认控件的方法 |
|
*/ |
|
- (void)setup; |
|
@end |
|
|
|
@implementation XHShareMenuItemView |
|
|
|
- (void)setup { |
|
if (!_shareMenuItemButton) { |
|
UIButton *shareMenuItemButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
|
shareMenuItemButton.frame = CGRectMake(0, 0, kXHShareMenuItemWidth, kXHShareMenuItemWidth); |
|
shareMenuItemButton.backgroundColor = [UIColor clearColor]; |
|
[self addSubview:shareMenuItemButton]; |
|
|
|
self.shareMenuItemButton = shareMenuItemButton; |
|
} |
|
|
|
if (!_shareMenuItemTitleLabel) { |
|
UILabel *shareMenuItemTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.shareMenuItemButton.frame), kXHShareMenuItemWidth, KXHShareMenuItemHeight - kXHShareMenuItemWidth)]; |
|
shareMenuItemTitleLabel.backgroundColor = [UIColor clearColor]; |
|
shareMenuItemTitleLabel.textColor = [UIColor blackColor]; |
|
shareMenuItemTitleLabel.font = [UIFont systemFontOfSize:12]; |
|
shareMenuItemTitleLabel.textAlignment = NSTextAlignmentCenter; |
|
[self addSubview:shareMenuItemTitleLabel]; |
|
|
|
self.shareMenuItemTitleLabel = shareMenuItemTitleLabel; |
|
} |
|
} |
|
|
|
- (void)awakeFromNib { |
|
[self setup]; |
|
} |
|
|
|
- (instancetype)initWithFrame:(CGRect)frame { |
|
self = [super initWithFrame:frame]; |
|
if (self) { |
|
[self setup]; |
|
} |
|
return self; |
|
} |
|
|
|
@end |
|
|
|
@interface XHShareMenuView () <UIScrollViewDelegate> |
|
|
|
/** |
|
* 这是背景滚动视图 |
|
*/ |
|
@property (nonatomic, weak) UIScrollView *shareMenuScrollView; |
|
|
|
/** |
|
* 显示页码的视图 |
|
*/ |
|
@property (nonatomic, weak) UIPageControl *shareMenuPageControl; |
|
|
|
/** |
|
* 第三方按钮点击的事件 |
|
* |
|
* @param sender 第三方按钮对象 |
|
*/ |
|
- (void)shareMenuItemButtonClicked:(UIButton *)sender; |
|
|
|
/** |
|
* 配置默认控件 |
|
*/ |
|
- (void)setup; |
|
|
|
@end |
|
|
|
@implementation XHShareMenuView |
|
|
|
- (void)shareMenuItemButtonClicked:(UIButton *)sender { |
|
if ([self.delegate respondsToSelector:@selector(didSelecteShareMenuItem:atIndex:)]) { |
|
NSInteger index = sender.tag; |
|
if (index < self.shareMenuItems.count) { |
|
[self.delegate didSelecteShareMenuItem:[self.shareMenuItems objectAtIndex:index] atIndex:index]; |
|
} |
|
} |
|
} |
|
|
|
- (void)reloadData { |
|
if (!_shareMenuItems.count) |
|
return; |
|
|
|
[self.shareMenuScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; |
|
|
|
CGFloat paddingX = 16; |
|
CGFloat paddingY = 10; |
|
for (XHShareMenuItem *shareMenuItem in self.shareMenuItems) { |
|
NSInteger index = [self.shareMenuItems indexOfObject:shareMenuItem]; |
|
NSInteger page = index / (kXHShareMenuPerRowItemCount * kXHShareMenuPerColum); |
|
CGRect shareMenuItemViewFrame = [self getFrameWithPerRowItemCount:kXHShareMenuPerRowItemCount |
|
perColumItemCount:kXHShareMenuPerColum |
|
itemWidth:kXHShareMenuItemWidth |
|
itemHeight:KXHShareMenuItemHeight |
|
paddingX:paddingX |
|
paddingY:paddingY |
|
atIndex:index |
|
onPage:page]; |
|
XHShareMenuItemView *shareMenuItemView = [[XHShareMenuItemView alloc] initWithFrame:shareMenuItemViewFrame]; |
|
|
|
if (shareMenuItem.titleColor) { |
|
shareMenuItemView.shareMenuItemTitleLabel.textColor = shareMenuItem.titleColor; |
|
} |
|
if (shareMenuItem.titleFont) { |
|
shareMenuItemView.shareMenuItemTitleLabel.font = shareMenuItem.titleFont; |
|
} |
|
shareMenuItemView.shareMenuItemButton.tag = index; |
|
[shareMenuItemView.shareMenuItemButton addTarget:self action:@selector(shareMenuItemButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; |
|
[shareMenuItemView.shareMenuItemButton setImage:shareMenuItem.normalIconImage forState:UIControlStateNormal]; |
|
shareMenuItemView.shareMenuItemTitleLabel.text = shareMenuItem.title; |
|
|
|
[self.shareMenuScrollView addSubview:shareMenuItemView]; |
|
} |
|
|
|
self.shareMenuPageControl.numberOfPages = (self.shareMenuItems.count / (kXHShareMenuPerRowItemCount * 2) + (self.shareMenuItems.count % (kXHShareMenuPerRowItemCount * 2) ? 1 : 0)); |
|
[self.shareMenuScrollView setContentSize:CGSizeMake(((self.shareMenuItems.count / (kXHShareMenuPerRowItemCount * 2) + (self.shareMenuItems.count % (kXHShareMenuPerRowItemCount * 2) ? 1 : 0)) * CGRectGetWidth(self.bounds)), CGRectGetHeight(self.shareMenuScrollView.bounds))]; |
|
} |
|
|
|
/** |
|
* 通过目标的参数,获取一个grid布局 |
|
* |
|
* @param perRowItemCount 每行有多少列 |
|
* @param perColumItemCount 每列有多少行 |
|
* @param itemWidth gridItem的宽度 |
|
* @param itemHeight gridItem的高度 |
|
* @param paddingX gridItem之间的X轴间隔 |
|
* @param paddingY gridItem之间的Y轴间隔 |
|
* @param index 某个gridItem所在的index序号 |
|
* @param page 某个gridItem所在的页码 |
|
* |
|
* @return 返回一个已经处理好的gridItem frame |
|
*/ |
|
- (CGRect)getFrameWithPerRowItemCount:(NSInteger)perRowItemCount |
|
perColumItemCount:(NSInteger)perColumItemCount |
|
itemWidth:(CGFloat)itemWidth |
|
itemHeight:(NSInteger)itemHeight |
|
paddingX:(CGFloat)paddingX |
|
paddingY:(CGFloat)paddingY |
|
atIndex:(NSInteger)index |
|
onPage:(NSInteger)page { |
|
CGRect itemFrame = CGRectMake((index % perRowItemCount) * (itemWidth + paddingX) + paddingX + (page * CGRectGetWidth(self.bounds)), ((index / perRowItemCount) - perColumItemCount * page) * (itemHeight + paddingY) + paddingY, itemWidth, itemHeight); |
|
return itemFrame; |
|
} |
|
|
|
#pragma mark - Life cycle |
|
|
|
- (void)setup { |
|
self.autoresizingMask = UIViewAutoresizingFlexibleWidth; |
|
|
|
if (!_shareMenuScrollView) { |
|
UIScrollView *shareMenuScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) - kXHShareMenuPageControlHeight)]; |
|
shareMenuScrollView.delegate = self; |
|
shareMenuScrollView.canCancelContentTouches = NO; |
|
shareMenuScrollView.delaysContentTouches = YES; |
|
shareMenuScrollView.backgroundColor = self.backgroundColor; |
|
shareMenuScrollView.showsHorizontalScrollIndicator = NO; |
|
shareMenuScrollView.showsVerticalScrollIndicator = NO; |
|
[shareMenuScrollView setScrollsToTop:NO]; |
|
shareMenuScrollView.pagingEnabled = YES; |
|
[self addSubview:shareMenuScrollView]; |
|
|
|
self.shareMenuScrollView = shareMenuScrollView; |
|
} |
|
|
|
if (!_shareMenuPageControl) { |
|
UIPageControl *shareMenuPageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.shareMenuScrollView.frame), CGRectGetWidth(self.bounds), kXHShareMenuPageControlHeight)]; |
|
shareMenuPageControl.backgroundColor = self.backgroundColor; |
|
shareMenuPageControl.hidesForSinglePage = YES; |
|
shareMenuPageControl.defersCurrentPageDisplay = YES; |
|
[self addSubview:shareMenuPageControl]; |
|
|
|
self.shareMenuPageControl = shareMenuPageControl; |
|
} |
|
} |
|
|
|
- (void)awakeFromNib { |
|
[self setup]; |
|
} |
|
|
|
- (id)initWithFrame:(CGRect)frame { |
|
self = [super initWithFrame:frame]; |
|
if (self) { |
|
// Initialization code |
|
[self setup]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)dealloc { |
|
_shareMenuItems = nil; |
|
_shareMenuScrollView.delegate = nil; |
|
_shareMenuScrollView = nil; |
|
_shareMenuPageControl = nil; |
|
} |
|
|
|
- (void)willMoveToSuperview:(UIView *)newSuperview { |
|
if (newSuperview) { |
|
[self reloadData]; |
|
} |
|
} |
|
|
|
#pragma mark - UIScrollView delegate |
|
|
|
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { |
|
//每页宽度 |
|
CGFloat pageWidth = scrollView.frame.size.width; |
|
//根据当前的坐标与页宽计算当前页码 |
|
NSInteger currentPage = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth)+1; |
|
[self.shareMenuPageControl setCurrentPage:currentPage]; |
|
} |
|
|
|
@end
|
|
|