[XTPaster] iOS 貼紙功能 實現(xiàn)

請支持原創(chuàng), 如需轉(zhuǎn)載, 請注明出處@TEASON

先把代碼貼上來,https://github.com/Akateason/XTPaster歡迎follow和star

XTPaster.gif

貼紙功能出現(xiàn)在很多圖片社交中, 就是圖片上面貼圖片, 對貼紙而言就是需要控制貼紙的位置,旋轉(zhuǎn),大小, 說到底是處理gesture,transform,frame, 如果需要多張貼紙, 需要考慮增加刪除和正在操作的對象 , 你的腦海中需要對這些東西有個了解.

鋪墊做到這里, github下載代碼, 集成方式如下
1.把Paster文件夾放到你的項目中
2.把UIImage+AddFunction類目放到你的項目中

主要邏輯在這兩個類
XTPasterStageViewXTPasterView
1.XTPasterStageView是畫布View,用來放需要被加工的圖片,是主舞臺,用來管理貼紙list,貼紙的新增和刪除, 保存退出等
2.XTPasterView是貼紙類. 手勢或點擊控制旋轉(zhuǎn),位置,大小等

調(diào)用方式

1.new

    _stageView = [[XTPasterStageView alloc] initWithFrame:rectImage] ;
    _stageView.originImage = self.imageWillHandle ; // 需要被貼紙加工的圖片
    _stageView.backgroundColor = [UIColor whiteColor] ;
    [self.view addSubview:_stageView] ;

2.add paster

    [_stageView addPasterWithImg:image] ;

如果你只想使用的話, 看到上面足矣 .

下面的部分從宏觀和細節(jié)兩個角度大概講一下我個人實現(xiàn)的思路 .

大方向思路
  • pasterID , 用一個自增的id來控制內(nèi)存里的貼紙唯一
  • XTPasterStageView管理多張貼紙 , XTPasterView中設(shè)置delegate在XTPasterStageView中回調(diào)控制新增和刪除
  • 多張貼紙需要判斷哪一張在操作中, 所以貼紙類需要一個bool狀態(tài)isOnFirst來控制是否正在操作.
@interface XTPasterStageView : UIView

@property (nonatomic,strong) UIImage *originImage ;//原圖

- (instancetype)initWithFrame:(CGRect)frame ;
- (void)addPasterWithImg:(UIImage *)imgP ;//加貼紙
- (UIImage *)doneEdit ;//完成保存

@end
#import <UIKit/UIKit.h>
#import "XTPasterStageView.h"

@class XTPasterView ;

@protocol XTPasterViewDelegate <NSObject>
- (void)makePasterBecomeFirstRespond:(int)pasterID ; //切換控制正在操作哪一張貼紙
- (void)removePaster:(int)pasterID ; //刪除某張
@end

@interface XTPasterView : UIView

@property (nonatomic,strong)    UIImage *imagePaster ; //img resource
@property (nonatomic)           int     pasterID ;
@property (nonatomic)           BOOL    isOnFirst ; //是否正在操作
@property (nonatomic,weak)    id <XTPasterViewDelegate> delegate ;
- (instancetype)initWithBgView:(XTPasterStageView *)bgView
                      pasterID:(int)pasterID
                           img:(UIImage *)img ;
- (void)remove ;

@end
細節(jié)思路

上面給出.h的外部Api只和需求有關(guān), 并把只和自己有關(guān)的細節(jié)放在.m里面
比如說變形按鈕, 刪除按鈕, 拖動等等, 這些都是控制單張貼紙操作的細節(jié) .
有以下幾點需要注意:

  • 變形按鈕: 實現(xiàn)縮放和旋轉(zhuǎn)
  • 拖動: 手勢 ,控制相對位移
  • 刪除按鈕: 刪除在舞臺上正在操作的貼紙
#define PASTER_SLIDE        150.0
#define FLEX_SLIDE          15.0
#define BT_SLIDE            30.0
#define BORDER_LINE_WIDTH   1.0
#define SECURITY_LENGTH     75.0

@interface XTPasterView ()
{
    CGFloat minWidth;
    CGFloat minHeight;
    CGFloat deltaAngle;
    CGPoint prevPoint;
    CGPoint touchStart;
    CGRect  bgRect ;
}

@property (nonatomic,strong) UIImageView    *imgContentView ;
@property (nonatomic,strong) UIImageView    *btDelete ; 
@property (nonatomic,strong) UIImageView    *btSizeCtrl ;

@end

細節(jié)的實現(xiàn)見源碼吧, 貼過來實在是有點冗長, github源碼點這里過去歡迎follow

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機茂嗓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來科阎,“玉大人述吸,你說我怎么就攤上這事÷啾浚” “怎么了蝌矛?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長错英。 經(jīng)常有香客問我入撒,道長,這世上最難降的妖魔是什么椭岩? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任茅逮,我火速辦了婚禮,結(jié)果婚禮上判哥,老公的妹妹穿的比我還像新娘献雅。我一直安慰自己,他們只是感情好塌计,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布挺身。 她就那樣靜靜地躺著,像睡著了一般夺荒。 火紅的嫁衣襯著肌膚如雪瞒渠。 梳的紋絲不亂的頭發(fā)上良蒸,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天技扼,我揣著相機與錄音伍玖,去河邊找鬼。 笑死剿吻,一個胖子當著我的面吹牛窍箍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丽旅,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼椰棘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了榄笙?” 一聲冷哼從身側(cè)響起邪狞,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茅撞,沒想到半個月后帆卓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡米丘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年剑令,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拄查。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡吁津,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堕扶,到底是詐尸還是另有隱情碍脏,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布稍算,位于F島的核電站典尾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏邪蛔。R本人自食惡果不足惜急黎,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侧到。 院中可真熱鬧勃教,春花似錦、人聲如沸匠抗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汞贸。三九已至绳军,卻和暖如春印机,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背门驾。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工射赛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奶是。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓楣责,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聂沙。 傳聞我的和親對象是個殘疾皇子秆麸,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容