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.
241 lines
8.8 KiB
241 lines
8.8 KiB
1 year ago
|
//
|
||
|
// 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
|