我已经在我的应用中使用了这段代码而且没有失败。它从我传入的CGImageRef和黑白面具中删除了一组片段。
我正在尝试将代码迁移到环境中,其中布局将基于自动布局和约束。
在我尝试在iPad 3,iPhone 5或4s上运行它之前,它与autolayout完美配合。
经过大量研究后,我认为由于此错误导致内存对齐问题导致崩溃。
EXC_BAD_ACCESS(代码= EXC_ARM_DALIGN,地址= 0x5baa20)
我相信我需要以某种方式调整每个组件的Bites / Bytes,以确保结果总是排在内存中,以避免激怒那些统治问题设备的ARMV7神。
我在网上找到了一些例子,但我还没有成功地适应这种情况。
我有一条替代路径,我可以对我的大小进行硬编码而不会导致崩溃,但我不得不放弃自动布局上的硬编码工作。
请帮助
- (UIImage*) maskImage2:(CGImageRef)image withMask:(UIImage *)maskImage withFrame:(CGRect)currentFrame {
@autoreleasepool {
CGFloat scale = [self adjustScale];
CGRect scaledRect = CGRectMake(currentFrame.origin.x*scale, currentFrame.origin.y*scale, maskImage.size.width*scale, maskImage.size.height*scale);
//Rect scaled up to account for iPad 3 sizing
NSLog( @"%@ origin", NSStringFromCGRect(scaledRect));
CGImageRef tempImage = CGImageCreateWithImageInRect(image, scaledRect);// Cut out the image at the size of the pieces
CGImageRef maskRef = maskImage.CGImage; //Creates the mask to cut out the fine edge and add backing layer
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef colorsHighlights = CGImageCreateWithMask(tempImage, mask);//Colors with tran transparent surround
CFRelease(tempImage);
CGSize tempsize = CGSizeMake(maskImage.size.width, maskImage.size.height);
CFRelease(mask);
UIGraphicsBeginImageContextWithOptions(CGSizeMake(tempsize.width+5, tempsize.height+5), NO, scale);
CGContextRef context = UIGraphicsGetCurrentContext();
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
CGContextSetShadow(context, CGSizeMake(1, 2), 2);
}else{
CGContextSetShadow(context, CGSizeMake(.5, .5), 1);
}
[[UIImage imageWithCGImage:colorsHighlights scale:scale orientation:UIImageOrientationUp] drawInRect:CGRectMake(0, 0, tempsize.width, tempsize.height)]; // <<<< Crash is here
CFRelease(colorsHighlights);
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return finalImage;
}
}