Я подклассифицировал UIImage для создания UIImageExtra. У меня есть метод в UIImageExtra, называемый adjustForResolution, который регулирует размер UIImage. Однако я хочу, чтобы он вернул UIImageExtra. Я понимаю, что мне нужно его преобразовать, но не совсем точно. В принципе, если я изменю размер UIImageExtra, он станет UIImage.Преобразование экземпляра родительского класса в его подкласс
Вот мой UIImageExtra класс:
#import "UIImageExtra.h"
#import <objc/runtime.h>
#import "UIApplication+AppDimensions.h"
#define kOriginData @"originData"
@implementation UIImageExtra
@synthesize originData;
+ (UIImageExtra *)imageNamed:(NSString *)imageName origin:(NSValue *)originData {
NSString *path = [[NSBundle mainBundle] pathForResource:imageName ofType:@""];
UIImageExtra *imageExtra = [[UIImageExtra alloc] initWithContentsOfFile:path];
imageExtra.originData = originData;
return imageExtra;
}
- (id)initWithContentsOfFile:(NSString *)path {
self = [super initWithContentsOfFile:path];
if (self) {
self = [self adjustForResolution];
}
NSLog(@"Image description: %@", [self description]);
return self;
}
- (id)adjustForResolution {
//All images are sized for ipad3 (2048 x 1536), so determine scale factor by ratio
CGSize screenSize = [UIApplication currentSize];
double scalefactor = screenSize.width/2048;
CGSize newSize = CGSizeMake(self.size.width*scalefactor, self.size.height*scalefactor);
UIImage *scaledImage = [self imageByScalingAndCroppingForSize:newSize];
return scaledImage;
}
- (id)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
//returns resized image
}
@end
Я думаю, что ваш метод imageByScalingAndCroppingForSize просто возвращает UIImage, поэтому ваш метод init возвращает UIImage. Также я не думаю, что это хорошая идея, чтобы вернуть другой объект, чем self в init. –
Что находится внутри 'imageByScalingAndCroppingForSize:'? Вы создаете новый экземпляр 'UIImage'? –
@JonathanCichon Да, так как я могу убедиться, что он возвращает экземпляр UIImageExtra, а не UIImage? – Smikey