gpt4 book ai didi

UIButton图片旋转问题

转载 作者:行者123 更新时间:2023-12-04 02:19:39 28 4
gpt4 key购买 nike

我有一个 [UIButton buttonWithType:UIButtonTypeCustom]具有由 [UIImage imageWithContentsOfFile:] 创建的图像(或背景图像 - 同样的问题)指向由相机拍摄并由应用程序保存在文档文件夹中的 JPG 文件。

如果我为 UIControlStateNormal 定义图像只有当我触摸按钮时,图像会按预期变暗,但它也会旋转 90 度或 180 度。当我移开手指时,它恢复正常。

如果我对 UIControlStateHighlighted 使用相同的图像,则不会发生这种情况,但随后我失去了触摸指示(较暗的图像)。

这只发生在从文件中读取的图像。 [UIImage ImageNamed:] 不会发生这种情况.

我尝试将文件保存为 PNG 格式而不是 JPG。在这种情况下,图像一开始就以错误的方向显示,并且在触摸时不会再次旋转。无论如何,这都不是一个好的解决方案,因为 PNG 太大而且处理起来很慢。

这是一个错误还是我做错了什么?

最佳答案

我找不到合适的解决方案,我需要一个快速的解决方法。下面是一个函数,给定一个 UIImage,它返回一个用深色 alpha 填充变暗的新图像。上下文填充命令可以替换为其他绘制或填充例程,以提供不同类型的变暗。

这是未优化的,并且是在对图形 api 了解最少的情况下制作的。

你可以使用这个函数来设置 UIControlStateHighlighted 状态图像,这样至少它会更暗。

+ (UIImage *)darkenedImageWithImage:(UIImage *)sourceImage
{
UIImage * darkenedImage = nil;

if (sourceImage)
{
// drawing prep
CGImageRef source = sourceImage.CGImage;
CGRect drawRect = CGRectMake(0.f,
0.f,
sourceImage.size.width,
sourceImage.size.height);
CGContextRef context = CGBitmapContextCreate(NULL,
drawRect.size.width,
drawRect.size.height,
CGImageGetBitsPerComponent(source),
CGImageGetBytesPerRow(source),
CGImageGetColorSpace(source),
CGImageGetBitmapInfo(source)
);

// draw given image and then darken fill it
CGContextDrawImage(context, drawRect, source);
CGContextSetBlendMode(context, kCGBlendModeOverlay);
CGContextSetRGBFillColor(context, 0.f, 0.f, 0.f, 0.5f);
CGContextFillRect(context, drawRect);

// get context result
CGImageRef darkened = CGBitmapContextCreateImage(context);
CGContextRelease(context);

// convert to UIImage and preserve original orientation
darkenedImage = [UIImage imageWithCGImage:darkened
scale:1.f
orientation:sourceImage.imageOrientation];
CGImageRelease(darkened);
}

return darkenedImage;
}

关于UIButton图片旋转问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230695/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com