iOS画像編集——落書き
iOS画像編集前に話しました.
画像の拡大縮小回転: http://blog.csdn.net/lwjok2007/article/details/50845510
フィルタ:http://blog.csdn.net/lwjok2007/article/details/50853878
次に私達は絵の落書きについて話します.少しずつ広げて、まず絵に線を引きます.
プロジェクトの名前はtestAddlineです.
次にデフォルトで生成したView Controllerに画像を追加します.
ボタンを同時に追加します.
いくつかの変数を作成
線の2つの属性の開始点の終了点(これは数学の2点で直線を決定します)
Lineクラスに2つの属性を作成します.
直線ボタンを追加して写真に線を描いてみます.
はい、線分を追加したらここまでにします. ソースコードはグループスペースにアップロードします.
みんなは興味があったらダウンロードしてもいいです.
次のセクションに矢印を付けます.http://blog.csdn.net/lwjok2007/article/details/50885376
demo:【60312写真に線を引くAddline.zip】
アップル開発グループ:414319235 参加を歓迎します.
画像の拡大縮小回転: http://blog.csdn.net/lwjok2007/article/details/50845510
フィルタ:http://blog.csdn.net/lwjok2007/article/details/50853878
次に私達は絵の落書きについて話します.少しずつ広げて、まず絵に線を引きます.
プロジェクトの名前はtestAddlineです.
次にデフォルトで生成したView Controllerに画像を追加します.
ボタンを同時に追加します.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIImageView *imageV = [[UIImageView alloc]initWithFrame:CGRectMake(10, 120, screen_Width-20, screen_Height-150)];
imageV.image = [UIImage imageNamed:@"640-960-1.jpg"];
[self.view addSubview:imageV];
UIButton *testBtn = [[UIButton alloc]initWithFrame:CGRectMake(screen_Width/2.0-60, 60, 120, 36)];
[testBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[testBtn setTitle:@" " forState:UIControlStateNormal];
[testBtn addTarget:self action:@selector(addLineAct:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:testBtn];
}
- (void)addLineAct:(id)sender{
NSLog(@" ");
}
次にUIViewを作成して、直線的な名前を付けます.DrawLine.いくつかの変数を作成
@property(nonatomic,strong) NSMutableArray * completeLines; //
@property(nonatomic,strong) NSMutableDictionary* LinesInProscess; //
@property(nonatomic,strong) UIColor *lineColor;//
@property (nonatomic)float lineWidth;//
初期化DrawLine//
- (id)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
//
_completeLines = [[NSMutableArray alloc]init];
_LinesInProscess = [[NSMutableDictionary alloc]init];
//
self.backgroundColor = [UIColor clearColor];
}
return self;
}
私たちは線を単独で抽象的に作成して、クラスの作成対象を名前をつけます.線の2つの属性の開始点の終了点(これは数学の2点で直線を決定します)
Lineクラスに2つの属性を作成します.
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface Line : NSObject
@property(nonatomic)CGPoint begin; //
@property(nonatomic)CGPoint end; //
@end
次に私達はDrawLineのを書き直します. drawRect方法 線を引く// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
//
CGContextRef cgt=UIGraphicsGetCurrentContext();
//
CGContextSetLineWidth(cgt, self.lineWidth);
//
CGContextSetLineCap(cgt, kCGLineCapRound);
//
[self.lineColor set];
//
for (Line *line in _completeLines){
CGContextMoveToPoint(cgt, [line begin].x, [line begin].y);
CGContextAddLineToPoint(cgt, [line end].x, [line end].y );
CGContextStrokePath(cgt);
}
//
for (NSArray *v in _LinesInProscess) {
Line *line =[_LinesInProscess objectForKey:v];
CGContextMoveToPoint(cgt, [line begin].x, [line begin].y);
CGContextAddLineToPoint(cgt, [line end].x, [line end].y );
CGContextStrokePath(cgt);
}
}
いくつかの指の滑りを実現して、指の位置を受けて線を引く.//
-(void)clearAll
{
[_completeLines removeLastObject];
[_LinesInProscess removeAllObjects];
[self setNeedsDisplay];
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//
for (UITouch *t in touches) {
if ([t tapCount]>1) {
//
[self clearAll];
return;
}
//NSValue
NSValue *key=[NSValue valueWithNonretainedObject:t];
// Line
CGPoint loc=[t locationInView:self];
Line *newLine=[[Line alloc]init ];
newLine.begin=loc;
newLine.end=loc;
//
[_LinesInProscess setObject:newLine forKey:key];
}
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//
for (UITouch * t in touches) {
NSValue *key=[NSValue valueWithNonretainedObject:t];
// UITouch Line
Line *line =[_LinesInProscess objectForKey:key];
CGPoint loc=[t locationInView:self];
line.end=loc;
}
[self setNeedsDisplay];
}
-(void)endTouches:(NSSet *) touches
{
// _completeLines _LinesInProscess
for (UITouch *t in touches) {
NSValue *key=[NSValue valueWithNonretainedObject:t];
Line *line =[_LinesInProscess objectForKey:key];
if (line) {
[_completeLines addObject:line];
[_LinesInProscess removeObjectForKey:key];
}
}
[self setNeedsDisplay];
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[self endTouches:touches];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self endTouches:touches];
}
View Controllerに戻ってボタンを押してイベントにDrawLineを追加してImageViewに行きます.- (void)addLineAct:(id)sender{
NSLog(@" ");
DrawLine *touchdrawView = [[DrawLine alloc]initWithFrame:imageV.frame];
touchdrawView.lineColor = [UIColor yellowColor];
touchdrawView.lineWidth = 5.0;
touchdrawView.tag = 902;
[self.view addSubview:touchdrawView];
}
はい、プログラムを実行してみます.直線ボタンを追加して写真に線を描いてみます.
はい、線分を追加したらここまでにします. ソースコードはグループスペースにアップロードします.
みんなは興味があったらダウンロードしてもいいです.
次のセクションに矢印を付けます.http://blog.csdn.net/lwjok2007/article/details/50885376
demo:【60312写真に線を引くAddline.zip】
アップル開発グループ:414319235 参加を歓迎します.