30

私は賢いと思い、正確なフレームサイズのUIImageViewの上に透明なUIButtonを配置するだけで、TouchUpInsideなどの好きなイベントに簡単に接続して、ビューコントローラーのアクションメソッドを呼び出せるようになりました。ユーザーがそれに触れます。まあ、それはアルファが0.1f以下になるまで機能します。0.01fを実行すると、機能しません。したがって、それを機能させるために、画面を長時間見ると、0.1fのアルファが透けて見えることがわかります。そして、それは完全に嫌です;)

iPhone OSは巧妙にしようとしているようで、視覚的にボタンがない場合はボタンのイベントをキャッチしません。それを解決する方法はありますか?

確かに、UIImageViewのサブクラスを作成し、touchesBegan:...などを実装することはできますが、それほどエレガントではありません。つまり...ウェブ上で画像をハイパーリンクしたい場合、その画像用に独自のHTML要素を作成することは絶対に避け、クリックしたときにURLに接続するだけです。それは私にはあまり意味がありません。

4

11 に答える 11

46

InterfaceBuilderでボタンの「タイプ」を「カスタム」に設定できるはずです。UIImageView上にテキストやグラフィック要素は表示されません。このように、アルファを調整する必要はありません。ビューがコードから構築されている場合は、次を使用します。

button = [UIButton buttonWithType:UIButtonTypeCustom];
于 2009-05-27T12:29:04.097 に答える
3

UIButtonTypeCustomに加えて、ボタンのテキストの色を次のように設定しました。

[button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal];
[button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor clearColor] forState:UIControlStateHighlighted];
[button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateHighlighted];
于 2009-08-18T15:48:05.407 に答える
3

これを行う最良の方法は次のとおりです。

myButton.hidden = YES;

buttonTypeプロパティは読み取り専用プロパティであるため、使用できません。これを使用する唯一の方法は、ボタンを動的に作成する場合です。

于 2011-04-10T21:57:43.597 に答える
2

ボタン(または任意のオブジェクト)を非表示にして、そのレイヤーにマスクを追加することにより、ボタンをアクティブに保つことができます。ボタンは非表示になりますが、イベントをキャッチします。

let layer = CAShapeLayer()
layer.frame = .zero
myButton.layer.mask = layer
于 2017-11-08T09:15:43.963 に答える
1

また、ボタンに画像を割り当てることができると思います。

画像はフレーム全体を占める可能性があり、正しく設定すればボタンの他​​のアーティファクトがなくなる可能性もあります。

プロパティをチェックしてください

UIButtonInstance.currentImage

そうすれば、本質的にすでに存在する要素でリソースを占有することはありません。

于 2009-05-27T12:38:34.250 に答える
0

上記のジェイソンズの答えはほぼ正しいですが、ボタンの種類を設定することはできません。したがって、プログラムで空のボタンを作成するには、次のコードを使用します。

UIButton* myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.frame=frame;
[self.view addSubview:myButton];
于 2011-04-10T22:12:41.423 に答える
0

これは私がしたことですが、後で見つけたUIButtonのサブクラスを使用して、ネットごとにサブクラス化するべきではありません。私のサブクラスはポイントと呼ばれていました

ポイント*mypoint= [ポイントbuttonWithType:UIButtonTypeCustom];

次に、ボタンに追加する画像がある場合:[mypoint setImage:imageNamed:@ "myimage"] forstate:UIControlStateNormal];

この画像を追加しない場合、ボタンはユーザーには表示されませんが、タッチに応答する必要があります。これが、ユーザーの操作に応答するためにimageViewにホットスポットを作成した方法です。

于 2012-05-03T00:05:52.273 に答える
0

それが私が見つけた唯一の方法です...

[yourButton setImage:[UIImage imageNamed:@"AnEmptyButtonWithTheSameSize.png"] forState:UIControlStateNormal];

画像の世話をします。.pngである必要があります

于 2012-09-04T07:16:10.183 に答える
0

カスタムUIButtonは、アルファが0に設定されていない限り、ユーザーの操作に応答します。カスタムUIButtonをimageViewの上に配置し、buttonPressedアクションに接続します。また、UIViewに追加の強調表示された画像を設定しました。これで、実際にはUIButtonのように動作します。最初に、UIViewが強調表示されたままになる期間を定義しました。

#define HIGHLIGHTED_DURATION 0.1 

次に、ボタンが押された場合に画像ビューを強調表示し、タイマーを開始して、その間強調表示された状態を維持します。イメージビューに強調表示された画像を設定することを忘れないでください。

- (IBAction)buttonPressed:(id)sender {

[_yourImageView setHighlighted:YES];
_timer = [NSTimer scheduledTimerWithTimeInterval:HIGHLIGHTED_DURATION
                                          target:self
                                        selector:@selector(removeHighlighted)
                                        userInfo:nil
                                         repeats:NO];
}

そして、タイマーが終了したら、単に強調表示を元に戻します。

-(void) removeHighlighted{
    _yourImageView.highlighted = NO;

}
于 2012-09-28T08:29:07.557 に答える
0

lazyImageView = [[UIImageView alloc] init];

                        button=[[UIButton alloc]init];
                        [UIButton buttonWithType:UIButtonTypeRoundedRect];
                        [button addTarget:self
                                   action:@selector(aMethodForVideo:)
                         forControlEvents:UIControlEventTouchUpInside];
                        [button setBackgroundImage:[UIImage    imageNamed:@"BackTransparent.png"] forState:UIControlStateHighlighted];
                        [button setTitle:@"" forState:UIControlStateNormal];

                                lazyImageView.frame=CGRectMake(x, y, w, h);
                                button.frame=CGRectMake(x, y, w, h);

ボタンのフレームを設定すると画像は両方とも同じフレームを持っています。私はこのコードを使用して正常に動作しています。また、ボタンの背景画像をState:UIControlStateHighlightedに設定して、クリックするとクリック効果が表示されるようにします。

于 2014-03-25T10:51:10.577 に答える
0

私は次のコードを使用してそれを行うことができました。iPadが横向きの場合、ボタンは画面の右上に配置されます。

    UIButton *adminButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    adminButton.frame = CGRectMake(974.0f, 0.0f, 50.0f, 50.0f);
    [adminButton setBackgroundColor:[UIColor clearColor]];
    [adminButton setTag:1];
    [adminButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:adminButton];

'adminButton'を押すと、次の関数が実行されます。

- (void)buttonPressed:(id)sender  {

int buttonId = ((UIButton *)sender).tag;

  switch(buttonId) {
    case 1:
       NSLog (@"Admin button was pressed");
        break;
    case 2:
        //if there was a button with Tag 2 this will be called
        break;

    default:
        NSLog(@"Key pressed: %i", buttonId);
        break;
   }

}
于 2016-03-18T12:35:53.167 に答える