Як зрабіць інтэрактыўнае UIButton над UIImageView?

I want to create a UIButton to display over an UIImageView. My code snippet is as shown below:

imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image

imageView.userInteractionEnabled = YES; //to enable touch interaction with image



UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"ClickMe" forState:UIControlStateNormal];
[btn.titleLabel setFont:[UIFont systemFontOfSize:16]];


 btn.frame = CGRectMake(340, 550, 70, 50);

[btn addTarget:self action:@selector(onClickHotSpotButton)   forControlEvents:UIControlEventTouchUpInside]; //it wasnt working


[imageView addSubview:btn];
[self addSubview:imageView]; 

Мая кнопка дадатак адлюстроўвае дакладна на часткі выявы, дзе я хачу, але ён не рэагуе на кнопку малюнка. Замест гэтага ён робіць выяўленне аднаго крана, як я увайсці выснову аб яго выяўленні. Але я хачу гэтую кнопку, каб атрымаць пстрыкнуў па выбары і выконваць некаторыя функцыі.

Загадзя дзякую.

Вахиб

9

8 адказы

Я паспрабаваў гэта, і гэта працуе для мяне .......

UIImageView * imageView = [[UIImageView alloc]init];
[imageView setImage:[UIImage imageNamed:@"image.jpeg"]];
[imageView setFrame:CGRectMake(10,10,300,300)];
[imageView setContentMode:UIViewContentModeScaleToFill];
[imageView setUserInteractionEnabled:TRUE];

UIButton * ButtonOnImageView = [[UIButton alloc]init];
[ButtonOnImageView setFrame:CGRectMake(135,120,60,30)];
[ButtonOnImageView setImage:[UIImage imageNamed:@"image.jpeg"] forState:UIControlStateHighlighted];
 [ButtonOnImageView setImage:[UIImage imageNamed:@"image2.jpeg"] forState:UIControlStateNormal];
[ButtonOnImageView addTarget:self action:@selector(OnClickOfTheButton) forControlEvents:UIControlEventTouchUpInside];

 [imageView addSubview:ButtonOnImageView];
 [self.view addSubview:imageView];
5
дададзена
Калі вы ўсталюеце малюнка на кнопцы, чаму вы ўсё яшчэ выкарыстоўваць UIImageView?
дададзена аўтар tcurdt, крыніца
  1. you have to add define button as custom.It will work for you.

    UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];

3
дададзена

Вы можаце выкарыстоўваць толькі адну кнопку і сказаць:

[UIButton setImage:[imageNamed:@"image.png"]];
3
дададзена
Ваша рашэнне здаецца найбольш элегантным
дададзена аўтар nurxyz, крыніца

вам трэба дадаць кнопку як падклас

<�Р> Scrollview </р>

ня

<�Р> ImageView </р>

.. яно не будзе клікабельнасць, калі кнопка з'яўляецца падклас UIImageView .. прызначыць Speacial тэг для кожнай кнопкі, каб распазнаць пстрыкнуў кнопку

спадзяюся, што гэта дапамагае

1
дададзена

Я магу паказаць UIButton на UIImageView і гэта код абнаўлення. Я згадаў нядаўнія праблемы ў ніжняй часткі.

imageView = [[UIImageView alloc] initWithImage:image]; //initWithImage:image

//imageView.tag = i;//tag our images for later use when we place them in serial form
[imageView setContentMode:UIViewContentModeScaleToFill]; //though it has no impact
imageView.userInteractionEnabled = YES; //to enable touch interaction with image

[self addSubview:imageView];

UIButton *btn = [[UIButton buttonWithType:UIButtonTypeContactAdd] retain]; //Plus icon button

btn.frame = CGRectMake(215, 550, 100, 100);
[btn addTarget:self action:@selector(onClickHotSpotButton) forControlEvents:UIControlEventTouchUpInside]; //it wasnt working

**[self addSubview:btn]; //Buttons are clickable but shows button on all images**

//[imageView addSubview:btn]; //Buttons are not clickable and are shown on all images

У мяне ёсць два варыянты абрад у цяперашні час. Калі б я быў зрабіць маю кнопку падвід з ImageView або ScrollView, які з'яўляецца бацькам ImageView. Калі я зрабіць кнопку падвід з Scrollview як [само addSubView: BTN]; ён адлюстроўвае ў правільным становішчы і інтэрактыўны, але праблема заключаецца ў тым, што яна ствараецца на ўсе выявы ў чарзе, таму што я раблю гэта падвідам з бацькоўскага выгляду Scrollview то ёсць. Інакш, калі я зрабіць гэта подтаблица зрок дзіцяці, які ImageView г.зн. з'яўляецца унікальным для кожнага малюнка, але ўсё ж яго паказаная на ўсе выявы і яго ня кликабелен: /

Можа any1 весці мяне пра тое, як зрабіць яго інтэрактыўным і трымаць сувязь паміж дынамічнай кнопкай і выявай унікальным, так што ў мяне ёсць розныя кнопкі ў розных пазіцыях на кожнае малюнку ў чарзе.

0
дададзена

Калі гэта інтэрактыўнае малюнак, якое я аддаю перавагу малюнак над кнопкай.

UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setFrame:CGRectMake(kLeftMargin, 10, self.view.bounds.size.width - kLeftMargin -      kRightMargin, 52)];
[sampleButton setTitle:@"Button Title" forState:UIControlStateNormal];
[sampleButton setFont:[UIFont boldSystemFontOfSize:20]];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton];
0
дададзена
Дзякуй за ваш адказ. Няхай гэта будзе ImageButton ці не не мае значэнне для мяне. Усё, што я хачу, каб зрабіць яго інтэрактыўным. У мяне ёсць два варыянты абрад у цяперашні час. Калі б я быў зрабіць маю кнопку падвід з ImageView або ScrollView, які з'яўляецца бацькам ImageView. Калі я зрабіць кнопку падвід з Scrollview як [само addSubView: BTN]; ён адлюстроўвае ў правільным становішчы і інтэрактыўны, але праблема заключаецца ў тым, што яна ствараецца на ўсе выявы ў чарзе, таму што я раблю гэта падвідам з бацькоўскага выгляду Scrollview то ёсць. Інакш, калі я зрабіць гэта подтаблица зрок дзіцяці, які ImageView г.зн. з'яўляецца унікальным для кожнага малюнка, ня клікабельна: /
дададзена аўтар Wahib Ul Haq, крыніца

Я зрабіў нешта падобнае ў адным з маіх прыкладанняў. Я стварыў XIb файл, які утрымліваў шэраг малюнкаў, кожны з якіх з дапамогай кнопкі, праведзенай зверху. Я падключыў тых, з адпаведнымі выхадамі ў файле класа. Я тады працаваў, якая была націснутая ў touchesBegan з дапамогай:

if(CGRectContainsPoint(btnFirstButton.frame, touchLocation)){
    //do something useful
}else if(CGRectContainsPoint(btnSecondButton.frame, touchLocation)){
    //do something useful
}

Надзея, што дапамагае - працаваў для мяне :-)

0
дададзена

паспрабуйце ўсталяваць userinteraction кнопкі ўключана.

[btn setEnabled:YES];

Сог UIImageView ўсталюе userinteraction кнопкі па змаўчанні адключана.

Інакш вы маглі б паспрабаваць this.Just змяніць дзве апошнія радкі.

замяніць:

[imageView addSubview:btn];
[self addSubview:imageView]; 

з гэтым:

[self addSubview:imageView];
[self addSubview:btn];

Пераканайцеся, што вы дадаеце ImageView першы і другі кнопкі, як я ўжо згадваў. інакш кнопка будзе B размешчана за ImageView і будзе здаецца схаваным.

0
дададзена