本文主要讲解模仿微博的地方吧,至于其他的功能(定位,环信,极光推送,3D Touch 和 指纹解锁),有时间再另起一篇博客讲解。
这是项目的开源地址:JTBlogDemo
首先我们需要自定义TabBar,在正中间加上一个‘加号’的按钮。我们需要创建一个类JTTabBar,继承自UITabBar,把这个按钮添加上去。话不多说,上代码:
- (instancetype) initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor grayColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"Helvetica" size:12.0f],NSFontAttributeName,nil] forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:AppTintColor, NSForegroundColorAttributeName, [UIFont fontWithName:@"Helvetica" size:12.0f],NSFontAttributeName,nil] forState:UIControlStateSelected];
self.tintColor = AppTintColor;
UIButton *blogBtn = [[UIButton alloc] init];
[blogBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button"] forState:UIControlStateNormal];
[blogBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted"] forState:UIControlStateHighlighted];
[blogBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add"] forState:UIControlStateNormal];
[blogBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted"] forState:UIControlStateHighlighted];
blogBtn.size = [UIImage imageNamed:@"tabbar_compose_button"].size;
[blogBtn addTarget:self action:@selector(sendBlog:) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:blogBtn];
self.blogBtn = blogBtn;
}
return self;
}
效果如图:
同时为JTTabBar加一个代理,用于响应点击:
@protocol JTTabBarDelegate <UITabBarDelegate>
@optional
- (void)selectSendBlogBtn:(JTTabBar *)tabBar;
@end
- (void)sendBlog:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(selectSendBlogBtn:)]) {
[self.delegate selectSendBlogBtn:self];
}
}
在JTTabBarController中使用KVC直接将UITabBar替换成我们自定义的TabBar,具体看Demo。我们点击发微博按钮时,当我们点击‘加号’按钮时,直接present发微博的页面JTBlogViewController,同时调用方法 - (void)appearAnimation,播放类似微博的弹簧动画 。点击其中一个按钮或者旁边的时候dismiss发微博的页面JTBlogViewController,同时调用方法 - (void)disAppearAnimation,播放消失动画。
进入编辑页面时,初始化JTBlogEditView,创建编辑页面,包括下面的定位,公开程度,以及对应的照片,拍照,视频和表情的按钮。具体选择照片,视频和拍照等(图片是在模拟器的50%scale下截的图,不是很清晰)
最后涉及到一些照片选择,拍照,视频等,我里面限定的是最多选取9张图片,当然你可以根据自己的需求来设定。为了避免第二次进入ImagePickerViewController中选择照片,会重复的问题,每次选完照片是就会将已经选择的照片全部删除(不包括拍的照片),然后保存到缓存中,确保不会出现重复的照片。当我们发布时会将缓存清空。另外,若用户点击取消有一个保存草稿的选项,用户可以保存编辑的文字,下次进入时会自动出现在编辑框。
好啦,第一次在简书写博客,就这么多吧!还有很多细节没有讲,大家参考Demo吧_!