2016-04-05 12 views
0

View Controller内にView Controllerがあります。UIImageViewを配置しました。この方法でUIImageViewに存在するイメージを描画しようとしています。UIImageが予期せずサイズ変更

drawImageViewは私のUIImageViewで、editableImageは、私が描くしようとしていますUIImageである
- (void)viewDidLoad { 
[super viewDidLoad]; 
[self.drawImageView setImage:editableImage]; 
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(drawingViewDidPan:)]; 
panGesture.maximumNumberOfTouches = 1; 
self.drawImageView.userInteractionEnabled = YES; 
[self.drawImageView addGestureRecognizer:panGesture]; 
} 

私は、描画部分を実装しています

- (void)drawingViewDidPan:(UIPanGestureRecognizer*)sender 
{ 
    CGPoint currentDraggingPosition = [sender locationInView:drawImageView]; 

    if(sender.state == UIGestureRecognizerStateBegan){ 
    prevDraggingPosition = currentDraggingPosition; 
    } 

    if(sender.state != UIGestureRecognizerStateEnded){ 
     [self drawLine:prevDraggingPosition to:currentDraggingPosition]; 
    } 
    prevDraggingPosition = currentDraggingPosition; 
} 

-(void)drawLine:(CGPoint)from to:(CGPoint)to 
{ 
    CGSize size = drawImageView.frame.size; 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    [drawImageView.image drawAtPoint:CGPointZero]; 

    CGFloat strokeWidth = 5.0; 
    UIColor *strokeColor = [UIColor redColor]; 

    CGContextSetLineWidth(context, strokeWidth); 
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor); 
    CGContextSetLineCap(context, kCGLineCapRound); 


    CGContextMoveToPoint(context, from.x, from.y); 
    CGContextAddLineToPoint(context, to.x, to.y); 
    CGContextStrokePath(context); 

    drawImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
} 

を次のように問題はできるだけ早く私はUIImageを描画するために私の指を置くようリサイズすると、小さな残りなっているすべては、どのように私はこの問題を解決することができます良い

の作品?

私editableImageと呼ばれるボタンが

-(IBAction)drawOnOmage:(id)sender { 
    [self performSegueWithIdentifier:@"MySegue1" sender:self]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    ThirdViewController *destinationController = (ThirdViewController *)segue.destinationViewController; 
    destinationController->editableImage = self.editImage.image; 
} 
+0

編集あなたの質問と 'editableImage'から来ない場所私たちを見ます! – phi

+0

私はちょうど行ったが、画像はサイズ変更された画像に触れるとすべて元気です。 –

答えて

0

を描いた、私はちょうど新しいプロジェクトにあなたのコードをコピーして、私のために働くように見える別のViewControllerから来ています。私が気づく唯一の事は、あなたがprevDraggingPosition@property宣言を使用していないことです - これは多分問題ですか? prevDraggingPositionの宣言方法を教えてください。

私の例を見ている(私の作品、私は唯一のself.を追加):

#import "ViewController.h" 

@interface ViewController() 

@property (nonatomic, strong) IBOutlet UIImageView *drawImageView; 
@property (nonatomic, assign) CGPoint prevDraggingPosition; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view, typically from a nib. 

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(drawingViewDidPan:)]; 
    panGesture.maximumNumberOfTouches = 1; 
    self.drawImageView.userInteractionEnabled = YES; 
    [self.drawImageView addGestureRecognizer:panGesture]; 

} 

- (void)drawingViewDidPan:(UIPanGestureRecognizer*)sender 
{ 
    CGPoint currentDraggingPosition = [sender locationInView:self.drawImageView]; 

    if(sender.state == UIGestureRecognizerStateBegan){ 
     self.prevDraggingPosition = currentDraggingPosition; 
    } 

    if(sender.state != UIGestureRecognizerStateEnded){ 
     [self drawLine:self.prevDraggingPosition to:currentDraggingPosition]; 
    } 
    self.prevDraggingPosition = currentDraggingPosition; 
} 

-(void)drawLine:(CGPoint)from to:(CGPoint)to 
{ 
    CGSize size = self.drawImageView.frame.size; 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    [self.drawImageView.image drawAtPoint:CGPointZero]; 

    CGFloat strokeWidth = 5.0; 
    UIColor *strokeColor = [UIColor redColor]; 

    CGContextSetLineWidth(context, strokeWidth); 
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor); 
    CGContextSetLineCap(context, kCGLineCapRound); 


    CGContextMoveToPoint(context, from.x, from.y); 
    CGContextAddLineToPoint(context, to.x, to.y); 
    CGContextStrokePath(context); 

    self.drawImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 
} 

@end 
+0

私はインターフェイスファイルのpublic変数としてprevDraggingPositionを追加しました。 –

+0

私が上記の例で示したように '@ property'にすると動作しません。 – phi

+0

いいえ助けてくれない –

関連する問題