2013-12-10 4 views
0

Я новый для разработки iOS и обыскал перед публикацией, но не мог понять, как сделать передачу изображения вообще работой в моем проекте. Мне нужно передать UIImage, что пользователь извлек из DrawViewController к Draw2viewController.` # импортаПройдем рисунок UIimage к другому viewController

//DrawViewController.h 
@interface DrawViewController : UIViewController { 

CGPoint lastPoint; 
CGFloat red; 
CGFloat green; 
CGFloat blue; 
CGFloat brush; 
CGFloat opacity; 
BOOL mouseSwiped; 
} 

@property (weak, nonatomic) IBOutlet UIImageView *tempDrawImage; 
@property (weak, nonatomic) IBOutlet UIImageView *mainImage; 
- (IBAction)pencilPressed:(id)sender; 
- (IBAction)eraserPressed:(id)sender; 
@property (weak, nonatomic) IBOutlet UILabel *Sentence1; 
@property (weak, nonatomic) IBOutlet UIButton *Done; 



@end` 

------------------ DrawViewController.m-- ----------------

#import "DrawViewController.h" 
#import "Draw2ViewController.h" 
#import "SentenceViewController.h" 

@interface DrawViewController() 

@end 

@implementation DrawViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    red = 0.0/255.0; 
    green = 0.0/255.0; 
    blue = 0.0/255.0; 
    brush = 10.0; 
    opacity = 1.0; 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    Draw2ViewController *view2 = [[Draw2ViewController alloc] init]; 
    view2.myImage = _mainImage; 

    _Sentence1.text = _SentStr; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)pencilPressed:(id)sender { 
    UIButton * PressedButton = (UIButton*)sender; 

    switch(PressedButton.tag) 
    { 
     case 0: 
      red = 0.0/255.0; 
      green = 0.0/255.0; 
      blue = 0.0/255.0; 
      break; 
     case 1: 
      red = 105.0/255.0; 
      green = 105.0/255.0; 
      blue = 105.0/255.0; 
      break; 
     case 2: 
      red = 255.0/255.0; 
      green = 0.0/255.0; 
      blue = 0.0/255.0; 
      break; 
     case 3: 
      red = 0.0/255.0; 
      green = 0.0/255.0; 
      blue = 255.0/255.0; 
      break; 
     case 4: 
      red = 102.0/255.0; 
      green = 204.0/255.0; 
      blue = 0.0/255.0; 
      break; 
     case 5: 
      red = 102.0/255.0; 
      green = 255.0/255.0; 
      blue = 0.0/255.0; 
      break; 
     case 6: 
      red = 51.0/255.0; 
      green = 204.0/255.0; 
      blue = 255.0/255.0; 
      break; 
     case 7: 
      red = 160.0/255.0; 
      green = 82.0/255.0; 
      blue = 45.0/255.0; 
      break; 
     case 8: 
      red = 255.0/255.0; 
      green = 102.0/255.0; 
      blue = 0.0/255.0; 
      break; 
     case 9: 
      red = 255.0/255.0; 
      green = 255.0/255.0; 
      blue = 0.0/255.0; 
      break; 
    } 



} 

- (IBAction)eraserPressed:(id)sender { 

    red = 255.0/255.0; 
    green = 255.0/255.0; 
    blue = 255.0/255.0; 
    opacity = 1.0; 
} 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    mouseSwiped = NO; 
    UITouch *touch = [touches anyObject]; 
    lastPoint = [touch locationInView:self.view]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    mouseSwiped = YES; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.view]; 

    UIGraphicsBeginImageContext(self.view.frame.size); 
    [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); 
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal); 

    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    [self.tempDrawImage setAlpha:opacity]; 
    UIGraphicsEndImageContext(); 

    lastPoint = currentPoint; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

    if(!mouseSwiped) { 
     UIGraphicsBeginImageContext(self.view.frame.size); 
     [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
     CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
     CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush); 
     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, opacity); 
     CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
     CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
     CGContextStrokePath(UIGraphicsGetCurrentContext()); 
     CGContextFlush(UIGraphicsGetCurrentContext()); 
     self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 

    UIGraphicsBeginImageContext(self.mainImage.frame.size); 
    [self.mainImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:1.0]; 
    [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) blendMode:kCGBlendModeNormal alpha:opacity]; 
    self.mainImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    self.tempDrawImage.image = nil; 
    UIGraphicsEndImageContext(); 
} 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"ImagePass"]) 
    { 
     Draw2ViewController *D2V = [segue destinationViewController]. 
     D2V.myImage = _mainImage; 
    } 
} 
@end 

И Draw2viewController только что был создан так, есть только код по умолчанию в нем

+0

Вы используете s toryboard, чтобы переключиться с DrawViewController на Draw2viewController или создать Draw2viewController и представить его prog? – Greg

+0

да, используется раскадровка, поэтому я не могу вызвать контроллер родительского представления. (UIImage *) self.parentViewController.mainImage, я думаю ... .. –

+0

См. Параметр prepareForSegue в своем ответе. – Greg

ответ

-1

Вы можете попробовать использовать протокол делегата. Ссылка для делегатов может быть найдена по адресу here.

Или вы можете использовать NSNotificationCenter с пользовательской информацией NSNotification, содержащей изображение. Документация NSNotification составляет here.

+0

Пожалуйста, объясните проголосовав, чтобы я мог учиться на своих ошибках. – DrDisc

+0

Мы использовали делегат, когда вам нужна реализация обратного вызова в основном, например, если у вас есть NSOperation, где вы выполняете операцию с длиной, вы использовали реализацию делегата для уведомления делегата NSOperations о его результатах после его завершения. В приведенном выше заявлении вам не нужен делегат, так как это довольно просто, вы переходите от одного контроллера представления к другому, где вы можете передавать любые значения другому контроллеру вида в prepareForSegue, получая ссылку на контроллер представления segue и устанавливая его соответствующие свойства. – ldindu

0

В вашем Draw2viewController.h файле добавить:

@property (nonatomic, strong) UIImage *myImage; 

И в вашем DrawViewController импорта Draw2viewController.h и когда вы представить свою точку зрения программно вы можете сделать:

Draw2viewController *view2 = [[Draw2viewController alloc] init]; 
view2.myImage = YOUR_UIIMAGE_YOU_WANT_PASS; 
// Code for presenting/pushing view2 to view hierarchy 

Или когда вы делаете это с помощью видеоредактора с segue сделать это в prepareForSegue: метод:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
     if ([segue.identifier isEqualToString:@"YOURIDENTIFIER"]) 
     { 
      Draw2viewController *view2 = (Draw2viewController*)[segue destinationViewController]. 
      view2.myImage = YOUR_UIIMAGE_YOU_WANT_PASS; 
     } 
    } 
+0

- это подготовка к segue в drawViewController.m или мне нужно будет добавить код вручную? –

+0

Вы должны добавить его в drawViewController.m. Обратите внимание, что я добавил [segue.identifier isEqualToString: @ "YOURIDENTIFIER"] к ответу. Не забудьте добавить имя идентификатора в свой segue в раскадровке и заменить YOURIDENTIFIER на свой. – Greg

+0

- (Недействительными) prepareForSegue: (UIStoryboardSegue *) переход отправителя (идентификатор) отправитель { если ([segue.identifier isEqualToString: @ "ImagePass"]) { Draw2ViewController * view2 = (Draw2viewController *) [destinationViewController непосредственно перейти] , view2.myImage = _mainImage; } } Дает ошибку «Property view2 не найден на объекте типа id ???? –

Смежные вопросы