日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过path绘制点击区域

發布時間:2023/11/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过path绘制点击区域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過path繪制點擊區域

?

效果

?

源碼

https://github.com/YouXianMing/Animations

// // TapDrawImageView.h // TapDrawImageView // // Created by YouXianMing on 16/5/9. // Copyright ? 2016年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> #import "TapDrawPathManager.h" @class TapDrawImageView;static NSString *tapDrawImageViewNormalState = @"normalState"; static NSString *tapDrawImageViewHighlightState = @"highlightState"; static NSString *tapDrawImageDisableState = @"disableState";@protocol TapDrawImageViewDelegate <NSObject>- (void)tapDrawImageView:(TapDrawImageView *)tapImageView selectedPathManager:(TapDrawPathManager *)pathManager;@end@interface TapDrawImageView : UIView@property (nonatomic, weak) id <TapDrawImageViewDelegate> delegate;@property (nonatomic, strong) NSMutableArray <TapDrawPathManager *> *pathManagers;@end // // TapDrawImageView.m // TapDrawImageView // // Created by YouXianMing on 16/5/9. // Copyright ? 2016年 YouXianMing. All rights reserved. // #import "TapDrawImageView.h"@interface TapDrawImageView ()@property (nonatomic, strong) TapDrawPathManager *currentSelectedManager; @property (nonatomic, strong) UIImageView *imageView;@end@implementation TapDrawImageView- (instancetype)initWithFrame:(CGRect)frame {if (self = [super initWithFrame:frame]) {self.pathManagers = [NSMutableArray array];self.backgroundColor = [UIColor clearColor];}return self; }- (void)drawRect:(CGRect)rect {CGContextRef context = UIGraphicsGetCurrentContext();[self.pathManagers enumerateObjectsUsingBlock:^(TapDrawPathManager *pathManager, NSUInteger idx, BOOL *stop) {TapDrawObject *drawObject = [pathManager.colorsType objectForKey:pathManager.currentDrawType];// Set Fill Color. {CGFloat red = 0;CGFloat green = 0;CGFloat blue = 0;CGFloat alpha = 0;[drawObject.fillColor getRed:&red green:&green blue:&blue alpha:&alpha];CGContextSetRGBFillColor(context, red, green, blue, alpha);}// Set Stroke Color. {CGFloat red = 0;CGFloat green = 0;CGFloat blue = 0;CGFloat alpha = 0;[drawObject.strokeColor getRed:&red green:&green blue:&blue alpha:&alpha];CGContextSetRGBStrokeColor(context, red, green, blue, alpha);}pathManager.path.lineWidth = drawObject.lineWidth;[pathManager.path fill];[pathManager.path stroke];}]; }- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {UITouch *touch = [touches anyObject];CGPoint touchPoint = [touch locationInView:self];[self.pathManagers enumerateObjectsUsingBlock:^(TapDrawPathManager *pathManager, NSUInteger idx, BOOL *stop) {if ([pathManager.path containsPoint:touchPoint]) {if (self.delegate && [self.delegate respondsToSelector:@selector(tapDrawImageView:selectedPathManager:)]) {[self.delegate tapDrawImageView:self selectedPathManager:pathManager];}if ([pathManager.currentDrawType isEqualToString:tapDrawImageDisableState] == NO) {pathManager.currentDrawType = tapDrawImageViewHighlightState;_currentSelectedManager = pathManager;[self setNeedsDisplay];}*stop = YES;}}]; }- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {if (_currentSelectedManager) {_currentSelectedManager.currentDrawType = tapDrawImageViewNormalState;[self setNeedsDisplay];}_currentSelectedManager = nil; }- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {if (_currentSelectedManager) {_currentSelectedManager.currentDrawType = tapDrawImageViewNormalState;[self setNeedsDisplay];}_currentSelectedManager = nil; }@end

?

轉載于:https://www.cnblogs.com/YouXianMing/p/5618626.html

總結

以上是生活随笔為你收集整理的通过path绘制点击区域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。