1

反転して画像を作成し、それをボタンに追加する必要がありました。次のコードを使用しました

UIButton *playButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
playButton.frame = CGRectMake(xing, ying, dx,dy);
[playButton setTitle:text forState:UIControlStateNormal];
[playButton addTarget:self action:function forControlEvents:UIControlEventTouchUpInside];



UIImage *buttonImageNormal = [UIImage imageNamed:@"Begin-Set-Button.png"];
UIImage * other = [UIImage imageWithCGImage:buttonImageNormal.CGImage
                    scale:1.0 orientation: UIImageOrientationUpMirrored];
UIImage * awesome = [other stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[playButton setBackgroundImage:awesome forState:UIControlStateNormal];

画像は正しく表示されますが、クリックすると、ボタンには反転していない画像が表示されます。

これを修正しようとして、次のコード行を追加しました

[playButton setBackgroundImage:awesome forState:UIControlStateHighlighted];

しかし、ボタンをクリックしても、反転していない画像で作成したボタンのように色が暗くなりません。

反転した画像を使用するときに、反転した画像が押されたときに暗く表示されるようにコーディングするにはどうすればよいですか? 画像を手動で暗くする方法は知っていますが、単純な関数呼び出しで自動的に行う方法があるかどうか疑問に思っていましたか?

4

2 に答える 2

3

画像を反転する代わりに。imageView を反転しようとしましたか?

UIImage *img = [UIImage imageNamed:@"path/to-image.png"];

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.imageView.transform = CGAffineTransformMakeRotation(M_PI); // flip the image view
[button setImage:img forState:UIControlStateNormal];

これは、選択状態の強調表示を維持し、画像の反転に対処する必要がないようにするために行ったことです。

于 2013-04-16T18:32:30.633 に答える
1

私も同じ問題を抱えていたので、この投稿を見るために検索を行いました。おそらく画像が「固定」されていないため、ミラー操作は永続的ではないと思われます。

「imageWithCGImage:」のドキュメントをチェックアウトすると、次のようになります。

解説 このメソッドは画像オブジェクトをキャッシュしません。Core Graphics フレームワークのメソッドを使用して、Quartz イメージ参照を作成できます。

そのため、新しいコンテキストで新しいイメージが作成されない限り、イメージのミラーリングはイベントには適用されません。また、任意のサイズのキャンバスに画像を描画して、同じ背景のボタンを作成する方法にも取り組んでいます。このメソッドを使用して、ミラーリングなどの CG 操作を維持するイメージを作成できます。

+ (UIImage *)imageWithCanvasSize:(CGSize)canvasSize withImage:(UIImage *)anImage
{
    if (anImage.size.width > canvasSize.width ||
        anImage.size.height > canvasSize.height)
    {
        // scale image first
        anImage = [anImage scaleWithAspectToSize:canvasSize];
    }

    CGRect targetRect = CGRectZero;
    CGFloat xOrigin = (canvasSize.width - anImage.size.width) / 2;
    CGFloat yOrigin = (canvasSize.height - anImage.size.height) / 2;
    targetRect.origin = CGPointMake(xOrigin, yOrigin);
    targetRect.size = anImage.size;

    UIGraphicsBeginImageContextWithOptions(canvasSize, NO, anImage.scale);
    [anImage drawInRect:targetRect];

    UIImage *canvasedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return canvasedImage;    
}

- (UIImage*)scaleWithAspectToSize:(CGSize)newSize
{
    CGSize scaledSize = newSize;

    float scaleFactor = 1.0;

    if (self.size.width > self.size.height)
    {
        scaleFactor = self.size.width / self.size.height;
        scaledSize.width = newSize.width;
        scaledSize.height = newSize.height / scaleFactor;
    }
    else
    {
        scaleFactor = self.size.height / self.size.width;
        scaledSize.height = newSize.height;
        scaledSize.width = newSize.width / scaleFactor;
    }

    UIGraphicsBeginImageContextWithOptions(scaledSize, NO, 0.0);
    CGRect scaledImageRect = CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height);
    [self drawInRect:scaledImageRect];

    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();    

    return scaledImage;
}
于 2013-02-03T02:00:31.977 に答える