Ios 将图像添加到子类UIImageView

Ios 将图像添加到子类UIImageView,ios,objective-c,uiviewcontroller,uiimageview,subclass,Ios,Objective C,Uiviewcontroller,Uiimageview,Subclass,我试图从一个子类UIImageView添加一个点击手势,然后从视图控制器控制点击。我没有收到任何编译错误,但addSubview没有显示任何图像。如何使UIImageView显示 如果我试图从子类UIImageVIew控制点击和平移手势,我没有问题,但我想从视图控制器控制这些功能 - (void)addCharacter:(UITapGestureRecognizer *)t { NSLog(@"add character"); imageNSArray = [NSMutable

我试图从一个子类UIImageView添加一个点击手势,然后从视图控制器控制点击。我没有收到任何编译错误,但addSubview没有显示任何图像。如何使UIImageView显示

如果我试图从子类UIImageVIew控制点击和平移手势,我没有问题,但我想从视图控制器控制这些功能

- (void)addCharacter:(UITapGestureRecognizer *)t
{
    NSLog(@"add character");
    imageNSArray = [NSMutableArray array];
    uiImg = [UIImage imageNamed:@"homer.png"];
    CGPoint loc = [t locationInView:self.view];
    character = [[UIImageView alloc] initWithImage:uiImg];
    character.center = loc;
    [imageNSArray addObject:character];
    //Locate the imageNSArray on frameImageView area only.
    [self.view addSubview:character];     
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self    action:@selector(panCharacter:)];
    [self.character addGestureRecognizer:pan];
    character.userInteractionEnabled = YES;
}
相关代码如下所示

UIImageView子类    

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
   {
    //self.userInteractionEnabled = YES;
    previewController = [[PreviewController alloc]init];
    [previewController self];
    [self addSubview:character];
    // Tap Initialization code
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:(PreviewController *)self.previewController action:@selector(addCharacter:)];
    [self addGestureRecognizer:tap];
    self.userInteractionEnabled = YES;

   }
    return self;
}
视图控制器

- (void)addCharacter:(UITapGestureRecognizer *)t
{
    NSLog(@"add character");
    imageNSArray = [NSMutableArray array];
    uiImg = [UIImage imageNamed:@"homer.png"];
    CGPoint loc = [t locationInView:self.view];
    character = [[UIImageView alloc] initWithImage:uiImg];
    character.center = loc;
    [imageNSArray addObject:character];
    //Locate the imageNSArray on frameImageView area only.
    [self.view addSubview:character];     
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self    action:@selector(panCharacter:)];
    [self.character addGestureRecognizer:pan];
    character.userInteractionEnabled = YES;
}

在子类imageView后面放置一个视图。将手势识别应用于新视图。
您可以从新视图控制轻触手势。如果我不清楚,或者需要更多信息,请告诉我。

我想你想要的是。当用户点击屏幕时,您希望显示图像。 执行以下步骤: 1.将轻触手势识别器拖放到视图控制器的默认视图上。 2.将ctrl+手势识别器与ViewController.m连接

看看这段代码。刚刚修改了你的代码

- (IBAction)onTap:(UITapGestureRecognizer *)sender {
    NSLog(@"add character");

    UIImage * uiImg = [UIImage imageNamed:@"sel.png"];
    CGPoint loc = [sender locationInView:self.view];
    UIImageView * character = [[UIImageView alloc] initWithImage:uiImg];
    character.center = loc;


    [self.view addSubview:character];
}
如果这不是你想要的,请告诉我

编辑 最好使用此代码…无需执行上述步骤

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
    [self.view addGestureRecognizer:tap];
    self.view.userInteractionEnabled = YES;
}

- (void)onTap:(UITapGestureRecognizer *)sender
{
    NSLog(@"add character");

    UIImage * uiImg = [UIImage imageNamed:@"sel.png"];
    CGPoint loc = [sender locationInView:self.view];
    UIImageView * character = [[UIImageView alloc] initWithImage:uiImg];
    character.center = loc;

    [self.view addSubview:character];
}

我应该在视图控制器中创建此视图吗?是的,它应该在同一个视图控制器中。我或多或少地了解了这个想法,但如果您能更明确一些,我将不胜感激:。我做了类似于UIView*newView=[[UIView alloc]init]的操作;[newView addSubview:character];并且没有工作…好的…您添加了角色作为视图控制器的子视图。类似地,为视图控制器添加另一个子视图。将新添加的视图放置在customImageViewcharacter后面。现在将tapGesturerecognizer应用于新添加的视图。现在,若你们点击你们的图像,因为你们的图像并没有识别器,点击将被你们的自定义图像后面的视图识别。如果需要更多说明,请告诉我您是否使用了-idinitWithCoder:NSCoder*aDecoder,它在未从xib加载时可能不会被调用。此外,如果您的角色未启用用户交互,我认为添加的点击手势识别器将永远不会被解雇。也许你应该尝试在字符上添加识别器。什么是字符边界属性?宽度和高度是否为零?@zetachang我认为启用用户交互不应该是个问题,因为当我从子类运行代码时,它会显示并可以操作uiimageview。正在调试initWithCoder时called@KudoCC我没有设置bounds属性。我应该在[self.view addSubview:character];之前完成吗@Edu您只需在代码中设置字符的中心。您应该设置字符帧。我希望避免从viewDidLoad视图控制器调用识别器。这就是我创建UIImageView子类的原因。如果您看到我的原始代码,请使用preview controller初始化,然后使用initWithTarget:self.previewController调用它。当我点击时,它会调用预览控制器中的addCharacter方法。问题是,在这种情况下,我不能使用addSubview:self.view,因为我需要访问孩子的viewUIImageView。我尝试用characterImageView=[[characterImageView alloc]init]初始化;[角色形象自我观];我正在寻找的方法与。。祝你好运,兄弟…无法正确理解你的问题…抱歉