更新视图控制器而不替换所有内容

时间:2014-02-06 20:28:51

标签: ios iphone objective-c uiviewcontroller uiimageview

我正在创建一个应用程序,用户可以尝试使用不同的眼镜。

mainView控制器有两个IUImageViews(照片和眼镜)。此视图控制器还有两个按钮(拍照和选择照片)。一旦用户滑动或轻击导航按钮,就会出现侧面导航,用户可以选择一副眼镜来尝试。

这只适用于用户选择了一副眼镜然后拍摄或选择照片而不是反过来因为当选择一副眼镜时照片被完全覆盖。

这让我想知道如何以及如果我可以允许它以便视图不会被覆盖,所以如果用户拍照然后选择一副眼镜,照片会留在那里然后这副眼镜也会出现。

现在进入当前代码:

每副眼镜在导航上都有一个按钮,这是其中一个按钮的一个例子......

  - (IBAction)glass_one_pressed:(id)sender{  
[self performSegueWithIdentifier:@"imageChangeSegue" sender:nil];}

segue看起来像这样......

//Segue for glasses one
if ([[segue identifier] isEqualToString:@"imageChangeSegue"]) {
    NewViewController *secondViewController = segue.destinationViewController;
    secondViewController.theImageForTheImageView = [UIImage imageNamed:@"glasses_one.png"];
}

故事板图片:http://postimg.org/image/rcjfai52d/

我希望我已经很好地解释了一切,如果没有,我已经上传了项目给你看看。

下载邮编:https://mega.co.nz/#!9hxmjSZT!L7UFGpKBC5CsQQtuPGh0SVfRN4TdxLLRvh6jJW-TmD0

非常感谢任何帮助。请注意,我是iOS开发的新手,我从事Web开发工作,所以Objective-C和PHP编码之间的区别很大。

非常感谢, 扎克。

1 个答案:

答案 0 :(得分:0)

你的问题是你每次都创建一个新的NewViewController。

//Segue for glasses one
if ([[segue identifier] isEqualToString:@"imageChangeSegue"]) {
    NewViewController *secondViewController = segue.destinationViewController;
    secondViewController.theImageForTheImageView = [UIImage imageNamed:@"glasses_one.png"];
}

您应该隐藏导航控制器,或保存实际NewViewController中显示的图片并将其设置为新的。


在SidebarViewController.m中添加此方法以防止执行segue。

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    if ([identifier isEqualToString:@"imageChangeSegue"] || [identifier isEqualToString:@"glasses_two"]) {
        return NO;
    }
    return YES;
}

更改处理程序,如下所示:

//When glasses one button is pressed...
- (IBAction)glass_one_pressed:(id)sender{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    SWRevealViewController *contr = (SWRevealViewController *)appDelegate.initialViewController;
    //close the sidebar
    [contr revealToggleAnimated:YES];
    //set the new image
    appDelegate.myNewViewController.glassView.image = [UIImage imageNamed:@"glasses_one.png"];
}

在NewViewController中添加:

- (void)viewDidAppear:(BOOL)animated
{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    appDelegate.myNewViewController = self;
}

在AppDelegate.h中添加:

@property (strong, nonatomic) SWRevealViewController *initialViewController;
@property (strong, nonatomic) NewViewController *myNewViewController;

在AppDelegate.m中将此行添加到应用程序:didFinishLaunchingWithOptions:method:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    //save the SWRevealViewController
    self.initialViewController = (SWRevealViewController*)self.window.rootViewController;

    return YES;
}