0

我有以下代码在 AppDelegate.h/.m 中工作,但无法将其更改为在 ViewController 中使用按钮触发它。

@implementation BSViewController

@synthesize imageView;
@synthesize workingImage;
- (IBAction) chooseImage:(id) sender {

    UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
    CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
    UIGraphicsBeginImageContext(CGSizeMake( 250,650));
    CGContextRef con = UIGraphicsGetCurrentContext();
    UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
    CGContextDrawImage(con, CGRectMake(0, 0, 13, 13) ,num);
    UIGraphicsEndImageContext();
    CGImageRelease(num);

    UIImageView* iv = [[UIImageView alloc] initWithImage:im];
    [self.imageView addSubview: iv];
    iv.center = self.imageView.center;
    [iv release];

我在模拟器中看到名为“选择图像”的按钮,但在那里看不到图像。

4

2 回答 2

0

您尚未添加self.imageView到任何视图。你需要

[self.view addSubview:self.imageView];

显示您的 imageView。

于 2013-01-13T16:27:27.590 回答
0

我能够让它工作,但让我先问你一些愚蠢的问题。您可以跳过这些并直接跳到最后以获得答案:

  • 以前有效吗?
  • 你为什么不使用ARC?
  • 您是否chooseImage:使用 Interface Builder 或以编程方式将按钮链接到按钮?我有时会忘记这个基本步骤,当然没有任何效果:)
  • 为什么要添加iv为子视图self.imageView而不是仅更改self.imageView. 知道这一点可能有助于正确回答。
  • 假设您有充分的理由添加iv为子视图,请注意iv.center = self.imageView.center中心位于两个不同的坐标系中。
    形成Apple 文档

    中心在其父视图的坐标系中指定,并以点为单位进行测量。设置此属性会相应地更改框架属性的值。

编辑:其他要检查的事情

  • self.imageView存在吗?我的意思是,你是用 IB 添加它并将其链接到 IBOutlet,还是以编程方式定义它?
  • 在里面加个断点chooseImage:,一步一步去,确保你在那里生成的对象没有nil
  • 测试:尝试self.imageView setImage:im代替self.imageView addSubview:iv,即使这不是您想要做的,如果其他一切正常,您应该会看到图像。

如果您切换和的顺序,它会
UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
起作用
CGContextDrawImage(con, CGRectMake(0, 0, 13, 13) ,num);

否则,您将要求im使用上下文的内容进行创建,而其中没有任何内容。

然后代码将变为:

UIImage* testCard = [UIImage imageNamed:@"ipad 7D.JPG"];
CGImageRef num = CGImageCreateWithImageInRect([testCard CGImage],CGRectMake(532, 0, 104, 104));
UIGraphicsBeginImageContext(CGSizeMake( 250,650));
CGContextRef con = UIGraphicsGetCurrentContext();
CGContextDrawImage(con, CGRectMake(0, 0, 13, 13) ,num);
UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRelease(num);

希望能帮助到你。:D

于 2013-01-13T16:52:40.223 回答