亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發之在列表上方添加水印的方法

2019-10-21 18:40:04
字體:
來源:轉載
供稿:網友

前言

為了防止工程師泄露用戶信息,我們有個需求是在列表上面添加水印。我封裝了這個視圖分享出來。下面話不多說了,來一起看看詳細的介紹吧

效果圖

iOS開發,水印

示例代碼如下:

watermarkView.h

#import <UIKit/UIKit.h>@interface watermarkView : UIImageView/** 設置水印 @param frame 水印大小 @param markText 水印顯示的文字 */- (instancetype)initWithFrame:(CGRect)frame WithText:(NSString *)markText;@end

watermarkView.m

#import "watermarkView.h"#define HORIZONTAL_SPACE 30//水平間距#define VERTICAL_SPACE 50//豎直間距#define CG_TRANSFORM_ROTATION (M_PI_2 / 3)//旋轉角度(正旋45度 || 反旋45度)@implementation watermarkView- (instancetype)initWithFrame:(CGRect)frame WithText:(NSString *)markText{ if(self = [super initWithFrame:frame]){    UIFont *font = [UIFont systemFontOfSize:14];    UIColor *color = YTHColorAlpha(152, 152, 152, 0.1);    //原始image的寬高  CGFloat viewWidth = frame.size.width;  CGFloat viewHeight = frame.size.height;    //為了防止圖片失真,繪制區域寬高和原始圖片寬高一樣  UIGraphicsBeginImageContext(CGSizeMake(viewWidth, viewHeight));    //sqrtLength:原始image的對角線length。在水印旋轉矩陣中只要矩陣的寬高是原始image的對角線長度,無論旋轉多少度都不會有空白。  CGFloat sqrtLength = sqrt(viewWidth*viewWidth + viewHeight*viewHeight);  //文字的屬性  NSDictionary *attr = @{        //設置字體大小        NSFontAttributeName: font,        //設置文字顏色        NSForegroundColorAttributeName :color,        };  NSString* mark = markText;  NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:mark attributes:attr];  //繪制文字的寬高  CGFloat strWidth = attrStr.size.width;  CGFloat strHeight = attrStr.size.height;    //開始旋轉上下文矩陣,繪制水印文字  CGContextRef context = UIGraphicsGetCurrentContext();    //將繪制原點(0,0)調整到原image的中心  CGContextConcatCTM(context, CGAffineTransformMakeTranslation(viewWidth/2, viewHeight/2));  //以繪制原點為中心旋轉  CGContextConcatCTM(context, CGAffineTransformMakeRotation(CG_TRANSFORM_ROTATION));  //將繪制原點恢復初始值,保證當前context中心和源image的中心處在一個點(當前context已經旋轉,所以繪制出的任何layer都是傾斜的)  CGContextConcatCTM(context, CGAffineTransformMakeTranslation(-viewWidth/2, -viewHeight/2));    //計算需要繪制的列數和行數  int horCount = sqrtLength / (strWidth + HORIZONTAL_SPACE) + 1;  int verCount = sqrtLength / (strHeight + VERTICAL_SPACE) + 1;    //此處計算出需要繪制水印文字的起始點,由于水印區域要大于圖片區域所以起點在原有基礎上移  CGFloat orignX = -(sqrtLength-viewWidth)/2;  CGFloat orignY = -(sqrtLength-viewHeight)/2;    //在每列繪制時X坐標疊加  CGFloat tempOrignX = orignX;  //在每行繪制時Y坐標疊加  CGFloat tempOrignY = orignY;  for (int i = 0; i < horCount * verCount; i++) {   [mark drawInRect:CGRectMake(tempOrignX, tempOrignY, strWidth, strHeight) withAttributes:attr];   if (i % horCount == 0 && i != 0) {    tempOrignX = orignX;    tempOrignY += (strHeight + VERTICAL_SPACE);   }else{    tempOrignX += (strWidth + HORIZONTAL_SPACE);   }  }  //根據上下文制作成圖片    UIImage *finalImg = UIGraphicsGetImageFromCurrentImageContext();  UIGraphicsEndImageContext();  CGContextRestoreGState(context);    self.image = finalImg; }  return self;}-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{  //1.判斷自己能否接收事件 if(self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) {  return nil; } //2.判斷當前點在不在當前View. if (![self pointInside:point withEvent:event]) {  return nil; } //3.從后往前遍歷自己的子控件.讓子控件重復前兩步操作,(把事件傳遞給,讓子控件調用hitTest) int count = (int)self.subviews.count; for (int i = count - 1; i >= 0; i--) {  //取出每一個子控件  UIView *chileV = self.subviews[I];  //把當前的點轉換成子控件坐標系上的點.  CGPoint childP = [self convertPoint:point toView:chileV];  UIView *fitView = [chileV hitTest:childP withEvent:event];  //判斷有沒有找到最適合的View  if(fitView){   return fitView;  } }  //4.沒有找到比它自己更適合的View.那么它自己就是最適合的View return self;}//作用:判斷當前點在不在它調用View,(誰調用pointInside,這個View就是誰)//什么時候調用:它是在hitTest方法當中調用的.//注意:point點必須得要跟它方法調用者在同一個坐標系里面-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ NSLog(@"%s",__func__); return NO;}

使用方法

 //加水印 watermarkView *watermark = [[watermarkView alloc] initWithFrame:CGRectMake(0, 0, KScreenW, KScreenH) WithText:@"測試"]; [self.view addSubview:watermark];

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久在线免费视频| 国产精品久久久| 午夜免费日韩视频| 欧美成年人网站| 亚洲字幕在线观看| 北条麻妃一区二区三区中文字幕| 亚洲电影免费观看高清完整版在线| 91精品国产综合久久男男| 91超碰caoporn97人人| 日韩av色在线| 亚洲欧美成人网| 91成人福利在线| 国产精欧美一区二区三区| 日韩网站在线观看| 中文字幕9999| 久久成年人免费电影| 亚洲最大av在线| 亚洲一区二区在线| 久久免费视频网| 992tv成人免费影院| 久久国产精彩视频| 国产成人鲁鲁免费视频a| 亚洲精品中文字幕有码专区| 高清一区二区三区四区五区| 亚洲国产精品久久久久| 亚洲视频在线观看免费| 精品国产电影一区| 一夜七次郎国产精品亚洲| 久久久国产精品x99av| 狠狠躁18三区二区一区| 欧美放荡办公室videos4k| 欧美国产极速在线| 日韩在线观看免费| 日本精品va在线观看| 91精品久久久久| 国产日韩中文字幕在线| 国产成人精品网站| 在线看国产精品| 国产成人在线一区| 国自产精品手机在线观看视频| 欧美精品日韩www.p站| 欧美一级大胆视频| 国产精品免费电影| 成人日韩在线电影| 欧美日韩精品国产| 日韩www在线| 欧美激情免费视频| 日av在线播放中文不卡| 欧洲成人午夜免费大片| 精品一区二区亚洲| 青青草原一区二区| 亚洲福利视频二区| 国产成人久久久| 日本不卡视频在线播放| 精品久久久视频| 7777kkkk成人观看| 色综合久久天天综线观看| 日韩av中文字幕在线免费观看| 国产欧美精品一区二区三区-老狼| 久久久免费精品视频| 国产不卡一区二区在线播放| 日韩在线视频免费观看高清中文| 国产日产欧美精品| 高清欧美一区二区三区| 亚洲第一页中文字幕| 色视频www在线播放国产成人| 国产综合久久久久| 亚洲电影免费观看高清完整版在线观看| 亚洲色图综合久久| 国产精品偷伦免费视频观看的| 精品久久久久久中文字幕| 日韩精品中文字幕视频在线| 亚洲一区免费网站| 亚洲欧美资源在线| 亚洲成人久久久久| 亚洲欧美精品在线| 国产精品久久久久久久久久ktv| 亚洲国产欧美一区二区丝袜黑人| 91av在线不卡| 久久久www成人免费精品张筱雨| 亚洲精品日韩欧美| 久久99久久99精品中文字幕| 色综合久久88色综合天天看泰| 欧美成人精品xxx| 国产精品久久久久一区二区| 免费91在线视频| 日韩免费av片在线观看| 国产精品久久久久久久电影| 奇米4444一区二区三区| 中文字幕亚洲欧美日韩2019| 久久久久久中文字幕| 久久综合伊人77777尤物| 日韩在线欧美在线国产在线| 国产精品毛片a∨一区二区三区|国| 精品久久久久久亚洲精品| 一本色道久久综合狠狠躁篇怎么玩| 久久久久免费视频| 亚洲社区在线观看| 欧美一性一乱一交一视频| 国产乱肥老妇国产一区二| 亚洲国产精品国自产拍av秋霞| 亚洲欧美日韩精品| 日本欧美在线视频| 亚洲欧美精品在线| 欧美另类第一页| 97在线视频免费观看| 精品久久国产精品| 免费不卡在线观看av| 久久国产精品影片| 日韩中文字幕不卡视频| 一区二区三区视频在线| 日韩视频在线免费| 97在线视频免费观看| 亚洲一区二区三区在线视频| 亚洲成人精品视频在线观看| 久久久久www| 欧美日韩免费在线观看| 日韩精品视频免费在线观看| 国产精品日韩在线观看| 自拍偷拍亚洲一区| 亚洲欧美精品一区| 欧美黄色性视频| 国产精品久久久av| 欧美电影免费观看大全| 成人久久久久久久| 亚洲免费人成在线视频观看| 欧美日韩在线看| 国产日韩换脸av一区在线观看| 91色在线视频| 成人久久精品视频| 国内精品久久久久久影视8| 国产成人综合一区二区三区| 精品福利在线观看| 欧美日韩亚洲国产一区| 日韩中文字幕网址| 亚洲精品99久久久久中文字幕| 亚洲伊人第一页| 亚洲第一福利网| www.欧美三级电影.com| 国产精品久久久久久久app| 久久久亚洲国产| 97香蕉久久夜色精品国产| 亚洲综合在线小说| 国产精品久久久久久久久久久不卡| 欧洲亚洲女同hd| 免费97视频在线精品国自产拍| 51久久精品夜色国产麻豆| 亚洲精品xxxx| 欧美激情二区三区| 欧美日韩午夜视频在线观看| 亚洲精品在线看| 欧美日韩视频在线| 色婷婷亚洲mv天堂mv在影片| 精品中文字幕久久久久久| 国产日韩精品在线播放| 狠狠久久五月精品中文字幕| 国产亚洲精品美女久久久久| 亚洲欧美中文日韩在线| 97精品久久久中文字幕免费| 欧美精品xxx| 午夜精品一区二区三区av| 奇米一区二区三区四区久久| 日韩中文字幕视频| 亚洲老司机av|