分享界面
来源:互联网 发布:linux清空显存 编辑:程序博客网 时间:2024/05/17 00:58
#import <UIKit/UIKit.h>@class ButtonView;@class ShareActivityView;typedef void (^ButtonViewHandler)(ButtonView *buttonView);@interface ShareActivityView : UIView//背景颜色, 默认是透明度0.95的白色@property (nonatomic, strong) UIColor *bgColor;//标题@property (nonatomic, strong) UILabel *titleLabel;//取消按钮@property (nonatomic, strong) UIButton *cancelButton;//一行有多少个, 默认是4. iPhone竖屏不会多于4, 横屏不会多于6. ipad没试, 不建议ipad用这个.@property (nonatomic, assign) int numberOfButtonPerLine;//是否可以通过下滑手势关闭视图, 默认为YES@property (nonatomic, assign) BOOL useGesturer;//是否正在显示@property (nonatomic, getter = isShowing) BOOL show;//初始化- (id)initWithTitle:(NSString *)title referView:(UIView *)referView;//添加buttonView, HYActivityView会根据buttonView的数量自动变高, 但是没有对高度上限做过多处理,莫要丧心病狂的添加太多.- (void)addButtonView:(ButtonView *)buttonView;- (void)show;- (void)hide;@end@interface ButtonView : UIView@property (nonatomic, retain) UILabel *textLabel;@property (nonatomic, retain) UIButton *imageButton;@property (nonatomic, retain) ShareActivityView *activityView;- (id)initWithText:(NSString *)text image:(UIImage *)image handler:(ButtonViewHandler)handler;@end
#import "ShareActivityView.h"#define BUTTON_VIEW_SIDE 70.0f#define BUTTON_VIEW_FONT_SIZE 13.0f@interface ButtonView ()@property (nonatomic, copy) ButtonViewHandler handler;@end@implementation ButtonView- (id)initWithText:(NSString *)text image:(UIImage *)image handler:(ButtonViewHandler)handler{ self = [super init]; if (self) { _handler = handler; [self setup:text image:image]; } return self;}- (void)setup:(NSString *)text image:(UIImage *)image{ _textLabel = [[UILabel alloc]init]; _textLabel.text = text; _textLabel.backgroundColor = [UIColor clearColor]; _textLabel.font = [UIFont systemFontOfSize:BUTTON_VIEW_FONT_SIZE]; _textLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:_textLabel]; _imageButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_imageButton setImage:image forState:UIControlStateNormal]; [_imageButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:_imageButton]; // don't know why ? self.translatesAutoresizingMaskIntoConstraints = NO; _textLabel.translatesAutoresizingMaskIntoConstraints = NO; _imageButton.translatesAutoresizingMaskIntoConstraints = NO; NSLayoutConstraint *constraint = nil; NSDictionary *views = @{@"textLabel":_textLabel, @"imageButton":_imageButton}; NSArray *constraints = nil; //view height constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:BUTTON_VIEW_SIDE]; [self addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:BUTTON_VIEW_SIDE]; [self addConstraint:constraint]; // label constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[textLabel]|" options:0 metrics:nil views:views]; [self addConstraints:constraints]; //imageView constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[imageButton(50)]-10-|" options:0 metrics:nil views:views]; [self addConstraints:constraints]; constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageButton(50)][textLabel]|" options:NSLayoutFormatAlignAllCenterX metrics:nil views:views]; [self addConstraints:constraints];}- (void)dealloc{ [_textLabel release]; [_handler release]; [super dealloc];}- (void)buttonClick:(UIButton *)button{ if (_handler) { _handler(self); } if (_activityView) { [_activityView hide]; }}@end#define ICON_VIEW_HEIGHT_SPACE 8#pragma mark ShareActivityView@interface ShareActivityView ()@property (nonatomic, retain) NSString *title;//将要显示在该视图上@property (nonatomic, retain) UIView *referView;//内容窗口@property (nonatomic, retain) UIView *contentView;//透明的关闭按钮@property (nonatomic, retain) UIButton *closeButton;//按钮加载的view@property (nonatomic, retain) UIView *iconView;//button数组@property (nonatomic, retain) NSMutableArray *buttonArray;//行数@property (nonatomic, assign) int lines;//目前正在生效的numberOfButtonPerLine@property (nonatomic, assign) int workingNumberOfButtonPerLine;//按钮间的间隔大小@property (nonatomic, assign) CGFloat buttonSpace;//消失的时候移除@property (nonatomic, retain) NSLayoutConstraint *contentViewAndViewConstraint;//iconView高度的constraint@property (nonatomic, retain) NSLayoutConstraint *iconViewHeightConstraint;//buttonView的constraints@property (nonatomic, retain) NSMutableArray *buttonConstraintsArray;@end@implementation ShareActivityView- (void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; [_referView release]; [_contentView release]; [_titleLabel release]; [_iconView release]; [super dealloc]; }- (id)initWithTitle:(NSString *)title referView:(UIView *)referView{ self = [super init]; if (self) { self.title = title; if (referView) { self.referView = referView; } [self setup]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; } return self; }- (void)calculateButtonSpaceWithNumberOfButtonPerLine:(int)number{ self.buttonSpace = (self.referView.bounds.size.width - BUTTON_VIEW_SIDE * number) / (number + 1); if (self.buttonSpace < 0) { [self calculateButtonSpaceWithNumberOfButtonPerLine:4]; } else { self.workingNumberOfButtonPerLine = number; } }- (void)setup{ self.buttonArray = [NSMutableArray array]; self.buttonConstraintsArray = [NSMutableArray array]; self.lines = 0; self.numberOfButtonPerLine = 4; self.useGesturer = YES; self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.3f]; self.contentView = [[UIView alloc]init]; self.bgColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.95f]; [self addSubview:self.contentView]; self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; [self.closeButton addTarget:self action:@selector(closeButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:self.closeButton]; self.titleLabel = [[UILabel alloc]init]; self.titleLabel.backgroundColor = [UIColor clearColor]; self.titleLabel.textAlignment = NSTextAlignmentCenter; self.titleLabel.font = [UIFont systemFontOfSize:17.f]; self.titleLabel.text = self.title; [self.contentView addSubview:self.titleLabel]; self.cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; [self.cancelButton setTitle:@"取 消" forState:UIControlStateNormal]; [self.cancelButton setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; [self.cancelButton addTarget:self action:@selector(closeButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; [self.contentView addSubview:self.cancelButton]; self.iconView = [[UIView alloc]init]; [self.contentView addSubview:self.iconView]; self.translatesAutoresizingMaskIntoConstraints = NO; self.contentView.translatesAutoresizingMaskIntoConstraints = NO; self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; self.titleLabel.translatesAutoresizingMaskIntoConstraints = NO; self.cancelButton.translatesAutoresizingMaskIntoConstraints = NO; self.iconView.translatesAutoresizingMaskIntoConstraints = NO; [self setNeedsUpdateConstraints]; //添加下滑关闭手势 UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeHandler:)]; swipe.direction = UISwipeGestureRecognizerDirectionDown; [self addGestureRecognizer:swipe]; }- (void)updateConstraints{ [super updateConstraints]; NSArray *constraints = nil; NSLayoutConstraint *constraint = nil; NSDictionary *views = @{@"contentView": self.contentView, @"closeButton": self.closeButton, @"titleLabel": self.titleLabel, @"cancelButton": self.cancelButton, @"iconView": self.iconView, @"view": self, @"referView": self.referView}; //view跟referView的宽高相等 constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.referView attribute:NSLayoutAttributeWidth multiplier:1 constant:0]; [self.referView addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.referView attribute:NSLayoutAttributeHeight multiplier:1 constant:0]; [self.referView addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.referView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; [self.referView addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.referView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; [self.referView addConstraint:constraint]; //closeButton跟view的左右挨着 constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[closeButton]|" options:0 metrics:nil views:views]; [self addConstraints:constraints]; //contentView跟view的左右挨着 constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics:nil views:views]; [self addConstraints:constraints]; //垂直方向closeButton挨着contentView constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[closeButton(==view@999)][contentView]" options:0 metrics:nil views:views]; [self addConstraints:constraints]; //titleLabel跟contentView左右挨着 constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[titleLabel]|" options:0 metrics:nil views:views]; [self.contentView addConstraints:constraints]; //cancelButton跟contentView左右挨着 constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[cancelButton]|" options:0 metrics:nil views:views]; [self.contentView addConstraints:constraints]; //iconView跟contentView左右挨着 constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[iconView]|" options:0 metrics:nil views:views]; [self.contentView addConstraints:constraints]; //iconView的高度 if (self.iconViewHeightConstraint) { [self.iconView removeConstraint:self.iconViewHeightConstraint]; } self.iconViewHeightConstraint = [NSLayoutConstraint constraintWithItem:self.iconView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:self.lines * BUTTON_VIEW_SIDE + (self.lines + 1) * ICON_VIEW_HEIGHT_SPACE]; [self.iconView addConstraint:self.iconViewHeightConstraint]; //垂直方向titleLabel挨着iconView挨着cancelButton constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[titleLabel(==30)]-[iconView]-[cancelButton(==30)]-8-|" options:0 metrics:nil views:views]; [self.contentView addConstraints:constraints]; }- (void)prepareForShow{ //计算行数 int count = [self.buttonArray count]; self.lines = count / self.workingNumberOfButtonPerLine; if (count % self.workingNumberOfButtonPerLine != 0) { self.lines++; } for (int i = 0; i < [self.buttonArray count]; i++) { ButtonView *buttonView = [self.buttonArray objectAtIndex:i]; [self.iconView addSubview:buttonView]; int y = i / self.workingNumberOfButtonPerLine; int x = i % self.workingNumberOfButtonPerLine; //排列buttonView的位置 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:buttonView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.iconView attribute:NSLayoutAttributeTop multiplier:1 constant:(y + 1) * ICON_VIEW_HEIGHT_SPACE + y * BUTTON_VIEW_SIDE]; [self.iconView addConstraint:constraint]; [self.buttonConstraintsArray addObject:constraint]; constraint = [NSLayoutConstraint constraintWithItem:buttonView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.iconView attribute:NSLayoutAttributeLeading multiplier:1 constant:(x + 1) * self.buttonSpace + x * BUTTON_VIEW_SIDE]; [self.iconView addConstraint:constraint]; [self.buttonConstraintsArray addObject:constraint]; } [self layoutIfNeeded]; }- (void)show{ if (self.isShowing) { return; } [self.referView addSubview:self]; [self setNeedsUpdateConstraints]; self.alpha = 0; [self prepareForShow]; self.contentViewAndViewConstraint = [NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; [self addConstraint:self.contentViewAndViewConstraint]; [UIView animateWithDuration:0.25f animations:^{ self.alpha = 1; [self layoutIfNeeded]; self.show = YES; }]; }- (void)hide{ if (!self.isShowing) { return; } [UIView animateWithDuration:0.25f animations:^{ self.alpha = 0; [self removeConstraint:self.contentViewAndViewConstraint]; self.contentViewAndViewConstraint = nil; [self layoutIfNeeded]; } completion:^(BOOL finished) { self.show = NO; [self removeFromSuperview]; }]; }- (void)deviceRotate:(NSNotification *)notification{ [self.iconView removeConstraints:self.buttonConstraintsArray]; [self.buttonConstraintsArray removeAllObjects]; [self calculateButtonSpaceWithNumberOfButtonPerLine:self.numberOfButtonPerLine]; [self prepareForShow]; [self.iconView removeConstraint:self.iconViewHeightConstraint]; self.iconViewHeightConstraint = [NSLayoutConstraint constraintWithItem:self.iconView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:self.lines * BUTTON_VIEW_SIDE + (self.lines + 1) * ICON_VIEW_HEIGHT_SPACE]; [self.iconView addConstraint:self.iconViewHeightConstraint]; }- (void)setNumberOfButtonPerLine:(int)numberOfButtonPerLine{ _numberOfButtonPerLine = numberOfButtonPerLine; [self calculateButtonSpaceWithNumberOfButtonPerLine:numberOfButtonPerLine]; }- (void)setBgColor:(UIColor *)bgColor{ _bgColor = bgColor; self.contentView.backgroundColor = bgColor; }- (void)addButtonView:(ButtonView *)buttonView{ [self.buttonArray addObject:buttonView]; buttonView.activityView = self; }- (void)closeButtonClicked:(UIButton *)button{ [self hide]; }- (void)swipeHandler:(UISwipeGestureRecognizer *)swipe{ if (self.useGesturer) { [self hide]; } }@end
- (void)addButtonClicked:(UIButton *)button{ ButtonView *bv = [[ButtonView alloc]initWithText:@"新浪微博" image:[UIImage imageNamed:@"share_platform_sina"] handler:^(ButtonView *buttonView){ NSLog(@"点击新增的新浪微博"); }]; [self.activityView addButtonView:bv];}//链接- (void)linkButton:(UIButton *)button{ if (!self.activityView) { self.activityView = [[ShareActivityView alloc]initWithTitle:@"分享到哪里" referView:self.view]; //横屏会变成一行6个, 竖屏无法一行同时显示6个, 会自动使用默认一行4个的设置. self.activityView.numberOfButtonPerLine = 6; ButtonView *bv = [[ButtonView alloc]initWithText:@"新浪微博" image:[UIImage imageNamed:@"share_platform_sina"] handler:^(ButtonView *buttonView){ NSLog(@"点击新浪微博"); }]; [self.activityView addButtonView:bv]; bv = [[ButtonView alloc]initWithText:@"Email" image:[UIImage imageNamed:@"share_platform_email"] handler:^(ButtonView *buttonView){ NSLog(@"点击Email"); }]; [self.activityView addButtonView:bv]; bv = [[ButtonView alloc]initWithText:@"印象笔记" image:[UIImage imageNamed:@"share_platform_evernote"] handler:^(ButtonView *buttonView){ NSLog(@"点击印象笔记"); }]; [self.activityView addButtonView:bv]; bv = [[ButtonView alloc]initWithText:@"QQ" image:[UIImage imageNamed:@"share_platform_qqfriends"] handler:^(ButtonView *buttonView){ NSLog(@"点击QQ"); }]; [self.activityView addButtonView:bv]; bv = [[ButtonView alloc]initWithText:@"微信" image:[UIImage imageNamed:@"share_platform_wechat"] handler:^(ButtonView *buttonView){ NSLog(@"点击微信"); }]; [self.activityView addButtonView:bv]; bv = [[ButtonView alloc]initWithText:@"微信圈" image:[UIImage imageNamed:@"share_platform_wechattimeline"] handler:^(ButtonView *buttonView){// NSLog(@"添加");// [self addButtonClicked:buttonView.imageButton]; }]; [self.activityView addButtonView:bv]; } [self.activityView show];}
0 0
- 分享界面
- 分享讨论界面问题!
- 界面库分享
- 分享界面用tablelayout
- 分享弹出界面
- 【源码分享】-wpf界面源代码分享
- 【源码分享】-c++界面源代码分享
- 【源码分享】-c#界面源代码分享
- 【源码分享】-wpf界面源代码分享
- 【源码分享】-c++界面源代码分享
- 【源码分享】-c#界面源代码分享
- 微信分享打不开分享界面
- FM界面-项目模块分享
- 分享一个登录缓冲界面
- 分享几款界面库
- CSkin界面库案例分享
- ShareSDK 自定义分享编辑界面
- 自定义ShareSDK分享平台界面
- android中图片的三级cache策略(内存、文件、网络) 一
- 例模式:饿汉式,懒汉式+工厂模式
- eclipse乱码
- MYSQL管理----数据库删除恢复
- python解决ImportError: No module named google.protobuf
- 分享界面
- ORACLE 关于一些日期处理的sql
- splay POJ 3580SuperMemo
- 用Highcharts画曲线图的时间轴问题
- ruby on rails学习第5篇:rake的用法(转载)
- php获取提交参数
- Android 系统字体规范与应用探索
- Android之模拟信号示波器
- Android 图片下载本地内存的缓存方式