文档章节

IOS博客项目搭建-16-发微博-点击button获取相册图片

Corwien
 Corwien
发布于 2016/05/27 23:04
字数 889
阅读 38
收藏 1

在上一篇,我们创建了发微博界面的Toolbar,并且可以根据键盘的弹出移动,下面我们给Toolbar上添加按钮,相机、相册、@、#、表情五个按钮,然后添加点击事件,如我们需要获取本地的图片发布在微博上,可以给相册添加点击事件,并通过代理(控制器),打开相册库,然后将选中的图片显示到发微博的界面。

###1、需要添加的按钮

输入图片说明

定义toolbar工具条上的按钮类型,可以用枚举。

IWComposeToolbar.h

//
//  IWComposeToolbar.h
//  ItcastWeibo
//
//  Created by kaiyi on 16-5-15.
//  Copyright (c) 2016年 itcast. All rights reserved.
//

#import <UIKit/UIKit.h>
@class IWComposeToolbar;

// 定义toolbar工具条上的按钮类型,五个按钮===*===
typedef enum {

    IWComposeToolbarButtonTypeCamera,
    IWComposeToolbarButtonTypePicture,
    IWComposeToolbarButtonTypeMention,
    IWComposeToolbarButtonTypeTrend,
    IWComposeToolbarButtonTypeEmotion,
} IWComposeToolbarButtonType;

@protocol IWComposeToolbarDelegate <NSObject>

@optional
-(void)composeToolbar:(IWComposeToolbar *)toolbar didClickedButton:(IWComposeToolbarButtonType)buttonType;

@end
@interface IWComposeToolbar : UIView
@property(weak, nonatomic) id<IWComposeToolbarDelegate> delegate;
@end

###2、在初始化工具条的时候,并添加上边的五个按钮

IWComposeToolbar.m

//
//  IWComposeToolbar.m
//  ItcastWeibo
//
//  Created by kaiyi on 16-5-15.
//  Copyright (c) 2016年 itcast. All rights reserved.
//

#import "IWComposeToolbar.h"

@implementation IWComposeToolbar

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        // 1.设置工具条背景图片,平铺
      self.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithName:@"compose_toolbar_background"]];
       // self.backgroundColor = [UIColor redColor];

        // 2.添加按钮

         [self addButtonWithIcon:@"compose_camerabutton_background" highIcon:@"compose_camerabutton_background_highlighted" tag:IWComposeToolbarButtonTypeCamera];
        [self addButtonWithIcon:@"compose_toolbar_picture" highIcon:@"compose_toolbar_picture_highlighted" tag:IWComposeToolbarButtonTypePicture];
         [self addButtonWithIcon:@"compose_mentionbutton_background" highIcon:@"compose_mentionbutton_background_highlighted" tag:IWComposeToolbarButtonTypeMention];

         [self addButtonWithIcon:@"compose_trendbutton_background" highIcon:@"compose_trendbutton_background_highlighted" tag:IWComposeToolbarButtonTypeTrend];
         [self addButtonWithIcon:@"compose_emoticonbutton_background" highIcon:@"compose_emoticonbutton_background_highlighted" tag:IWComposeToolbarButtonTypeEmotion];

    }
    return self;
    //
}

/**
 *
 * 添加按钮
 */
-(void)addButtonWithIcon:(NSString *)icon highIcon:(NSString *)highIcon tag:(int)tag
{
    UIButton *button = [[UIButton alloc] init];
    button.tag = tag;
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
    [button setImage:[UIImage imageWithName:icon] forState:UIControlStateNormal];
    [button setImage:[UIImage imageWithName:highIcon] forState:UIControlStateHighlighted];
    [self addSubview:button];
}

/**
 *
 * 监听按钮点击
 */
-(void)buttonClick:(UIButton *)button{

    // NSLog(@"%d", button.tag);

    if([self.delegate respondsToSelector:@selector(composeToolbar:didClickedButton:)])
    {
        [self.delegate composeToolbar:self didClickedButton:button.tag];

    }

}

/**
 *布局
 */
-(void)layoutSubviews{
    [super layoutSubviews];

    CGFloat buttonW = self.frame.size.width / self.subviews.count;
    CGFloat buttonH = self.frame.size.height;
    for(int i = 0; i < self.subviews.count; i++){
        UIButton *button = self.subviews[i];
        CGFloat buttonX = buttonW * i;
        button.frame = CGRectMake(buttonX, 0, buttonW, buttonH);

    }
}

@end

###3、具体的打开相册的方法,并写将图片显示在imageView ** IWComposeViewController.m**

#import "IWComposeViewController.h"
#import "IWTextView.h"
#import "AFNetworking.h"
#import "IWAccount.h"
#import "IWWeiboTool.h"
#import "IWAccountTool.h"
#import "MBProgressHUD+MJ.h"
#import "IWComposeToolbar.h"

@interface IWComposeViewController ()<UITextViewDelegate,IWComposeToolbarDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate>
@property (nonatomic, weak) IWTextView *textView;
@property (nonatomic, weak)IWComposeToolbar *toolbar;
@property (nonatomic, weak)UIImageView *imageView; // [new Add 2016-05-27]
@end

@implementation IWComposeViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 设置导航栏属性
    [self setupNavBar];

    // 添加textView
    [self setupTextView];

    // 添加toolbar ****===***
    [self setupToolbar];

    // 添加imageView (初始化) [new Add 2016-05-27]
    [self setupImageView];
}

/**
 *  添加imageView
 */
-(void)setupImageView
{
    UIImageView *imageView = [[UIImageView alloc] init];

    // 设置frame
    imageView.frame = CGRectMake(5, 80, 60, 60);
    [self.textView addSubview:imageView];

    // 赋值属性
    self.imageView = imageView;

}

#pragma mark - toolbar的代理方法
- (void)composeToolbar:(IWComposeToolbar *)toolbar didClickedButton:(IWComposeToolbarButtonType)buttonType
{
    switch (buttonType) {
        case IWComposeToolbarButtonTypeCamera: // 相机
            [self openCamera];
            break;

        case IWComposeToolbarButtonTypePicture: // 相册
            NSLog(@"jinqule");
            [self openPhotoLibarary];
            break;

        default:
            break;
    }
}

/**
 *  打开相机
 */
- (void)openCamera
{
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
    ipc.delegate = self;
    [self presentViewController:ipc animated:YES completion:nil];
}

/**
 *  打开相册
 */
-(void)openPhotoLibarary{
    NSLog(@"打开相册");
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    ipc.delegate = self;
    [self presentViewController:ipc animated:YES completion:nil];
}

/**
 * 图片选择控制器的代理
 */
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 1.销毁picker控制器
    [picker dismissViewControllerAnimated:YES completion:nil];

    // 2.获取到的图片
    UIImage *image = info[UIImagePickerControllerOriginalImage];

    // 3.把用户选择的图片显示在发微博编辑框内
    self.imageView.image = image;
    NSLog(@"%@", info);
}

/**
 *  添加Toolbar
 */
-(void)setupToolbar
{
    IWComposeToolbar *toolbar = [[IWComposeToolbar alloc] init];
    toolbar.delegate = self;  // 点击打开图片库的按钮[2016-05-26 00:45 ADD]

    // 设置frame
    CGFloat toolbarH = 44;
    CGFloat toolbarW = self.view.frame.size.width;  // 宽度为view的宽度
    CGFloat toolbarX = 0;   // 位置,在最左边
    CGFloat toolbarY = self.view.frame.size.height - toolbarH; // 无键盘时的toolbar高度
    toolbar.frame = CGRectMake(toolbarX, toolbarY, toolbarW, toolbarH);

    // toolbar的父控件是textview还是控制器?经过分析新浪微博的toolbar,当键盘消失时,toolbar永远在view的最底部
    // 所以,我们确定其父控件为控制器
    [self.view addSubview:toolbar];

    // 赋值属性
    self.toolbar = toolbar;

}

效果: 输入图片说明

注:本博客项目完整源码可以访问我的个人博客获取Corwien博客digtime.cn

© 著作权归作者所有

共有 人打赏支持
Corwien
粉丝 26
博文 149
码字总数 115164
作品 0
广州
程序员
Unity与IOS交互,调用IOS系统相机和相册

前面两篇总结了一下unity与android的简单交互和调用安卓系统相机和相册,比较蛋疼的是,后来发现不同的测试机上会有不同的bug。。。下阶段要一个一个的解决一下 今天总结一下与IOS的交互。这...

qq_32587659
05/16
0
0
在手机相册(ios设备相册)中创建相册

这篇博客的主要内容来源于cocoachina 里的贴子,代码能实现在在手机相册(ios设备相册)中创建相册的功能,下面我就原文整理,在扩展一下。 原文地址:http://www.cocoachina.com/bbs/read....

lady-奕奕
2014/05/23
0
4
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
fir.im Weekly - iOS 保持界面流畅的技巧

生命不息,coding 不止。本期 fir.im Weekly 收集了微博上的热转资源,包含 Android、iOS 开发工具、源码分享,产品 UI 设计的好文章,还有一些程序员成长的 Tips,希望看完你会有所收获。 ...

风起云飞fir_im
2015/11/16
0
0
Java转iOS-第一个项目总结(1)

0.前言 本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了objective-c零经验。2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心...

蛙牛
2015/03/31
0
67

没有更多内容

加载失败,请刷新页面

加载更多

Spring中static变量不能@value注入的原因

今天本想使用@Value的方式使类中的变量获得yml文件中的配置值,然而一直失败,获得的一直为null。 类似于这样写的。 public class RedisShardedPool { private static ShardedJedisPool pool...

钟然千落
32分钟前
1
0
CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部