之前在做图片浏览器的时候 需要用到类似于微信的ActionSheet 本来可以直接使用iOS官方的UIAlertController 但是我觉得上了 iOS9 之后 这个ActionSheet好丑 不喜欢 就自己 写了一个简单的
先看一下效果图

实现起来 还是挺简单的
首先肯定是一个自定义的view,在这里 是使用delegate实现点击捕获的 个人感觉delegate使用起来比较简单 当然block使用起来也不是特别麻烦,这个就看个人爱好吧
在自定义view里面有一个协议
@protocol PPSActionSheetDelegate
@required //当然这个可以写成optional的,但是不捕获点击事件,又做actionsheet干啥呢 就干脆写成了必须实现的 这样在使用的时候 发现未实现方法
/**
点击选项 实现这个代理必须实现这个方法 不然点击不能实现
@param actionSheet 当前显示的actionsheet 如果存在多个actionsheet 可以分别出是哪一个actionsheet
@param buttonIndex 点击的位置
*/
- (void)actionSheet:(PPSActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex;
@end
在点击事件里面 回传actionsheet的目的 是因为在一个viewcontroller里面可能会有多个 actionsheet展现,在同一个VC里面就需要区分 是哪个actionsheet 来区分操作不同的actionsheet当然可以使用tag来区分 当然也可以用其他的方法区分
这里就仁者见仁智者见智了
实现方法里面也没有什么可讲的 都是很简单的实现方法
根据传入的标题数目 来创建button选项
这一段代码 其实是对传入的othertitles的一个遍历 创建选项
va_list是C语言中 解决变参问题的一组宏
NSString* curStr;
va_list list;
if(otherTitles)
{
[self setupBtnWithTitle:otherTitles];
va_start(list, otherTitles);
while ((curStr = va_arg(list, NSString*))) {
[self setupBtnWithTitle:curStr];
}
va_end(list);
}
根据颜生成图片的方法:
/**
根据颜色生成图片
@param color 颜色
@return 图片
*/
- (UIImage*)imageWithColor:(UIColor*)color
{
CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return theImage;
}
源码放在了:
github.com/yangqian111…