你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> [XTPaster] iOS 貼紙功能實現

[XTPaster] iOS 貼紙功能實現

編輯:IOS開發基礎

作者:@TEASON

先把代碼貼上來,https://github.com/Akateason/XTPaster

1.gif

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

鋪墊做到這裡, github下載代碼, 集成方式如下

1.把Paster文件夾放到你的項目中

2.把UIImage+AddFunction類目放到你的項目中

主要邏輯在這兩個類

XTPasterStageView和XTPasterView

1.XTPasterStageView是畫布View,用來放需要被加工的圖片,是主舞台,用來管理貼紙list,貼紙的新增和刪除, 保存退出等

2.XTPasterView是貼紙類. 手勢或點擊控制旋轉,位置,大小等

調用方式

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] ;

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

下面的部分從宏觀和細節兩個角度大概講一下我個人實現的思路 .

大方向思路

  • pasterID , 用一個自增的id來控制內存裡的貼紙唯一

  • XTPasterStageView管理多張貼紙 , XTPasterView中設置delegate在XTPasterStageView中回調控制新增和刪除

  • 多張貼紙需要判斷哪一張在操作中, 所以貼紙類需要一個bool狀態isOnFirst來控制是否正在操作.

@interface XTPasterStageView : UIView
@property (nonatomic,strong) UIImage *originImage ;//原圖
- (instancetype)initWithFrame:(CGRect)frame ;
- (void)addPasterWithImg:(UIImage *)imgP ;//加貼紙
- (UIImage *)doneEdit ;//完成保存
@end
#import #import "XTPasterStageView.h"
@class XTPasterView ;
@protocol XTPasterViewDelegate - (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  delegate ;
- (instancetype)initWithBgView:(XTPasterStageView *)bgView
                      pasterID:(int)pasterID
                           img:(UIImage *)img ;
- (void)remove ;
@end

細節思路

上面給出.h的外部Api只和需求有關, 並把只和自己有關的細節放在.m裡面

比如說變形按鈕, 刪除按鈕, 拖動等等, 這些都是控制單張貼紙操作的細節 .

有以下幾點需要注意:

  • 變形按鈕: 實現縮放和旋轉

  • 拖動: 手勢 ,控制相對位移

  • 刪除按鈕: 刪除在舞台上正在操作的貼紙

#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

細節的實現見源碼吧, 貼過來實在是有點冗長, github源碼點這裡過去

如果你喜歡它覺得好用, 就在github加個star .嘻嘻.

一起來討論有趣的東西


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved