понедельник, 31 октября 2011 г.

Мои скрипты для работы в Xcode

Вот какие скрипты я использую для работы в Xcode (на них можно назначать сочетания клавиш). Для добавления скриптов и назначения им сочетаний клавиш найдите в полосе меню (у меня Xcode 3) пункт, напоминающий свиток, а в нём субменю Edit user scripts...

В ОСНОВНОМ ЭТО СКРИПТЫ ДЛЯ ДОБАВЛЕНИЯ ЧАСТО ИСПОЛЬЗУЕМЫХ СТРОК (без горячих сочетаний клавиш теряется их неоценимая помощь в работе):

1) Добавление NSLocalizedString(@"", @"")
#!/bin/sh
echo "NSLocalizedString(@\"\", @\"\")"

2) Добавление // property
#!/bin/sh
echo "// property"

3) и так далее до пункта 11)
#!/bin/sh
echo "@property (nonatomic, retain) IBOutlet "

4)
#!/bin/sh
echo "//----------------------------------------------------------"

5)
#!/bin/sh
echo "////////////////////////////////////////////////////////////"

6)
#!/bin/sh
echo "NSLog(@\"\");"

7)
#!/bin/sh
echo "NSLog(@\"%s function %s \", __FILE__, __FUNCTION__);"

8)
#!/bin/sh
echo "NSLog(@\"%s line %d \", __FILE__, __LINE__);"

9)
#!/bin/sh
echo "using namespace "

10)
#!/bin/sh
echo "@synthesize "

11) Вставляю свои инициалы, дату и время (чтобы не забыть удалить после экспериментов)
#!/bin/sh
echo "//MD:$(date +%Y%m%d-%H:%M)"

12)
#!/bin/sh
echo "////////////////////////////////////////////////////////////"
echo "#pragma mark -"
echo "#pragma mark methods"
echo "////////////////////////////////////////////////////////////"

13) Сначала выделяете нужный текст (например имя функции). После выполнения этого скрипта у вас получится в коде вывод в отладочную консоль выделенного текста.
#!/bin/sh
echo "NSLog(@\"%%%{PBXSelectedText}%%%\");";

вторник, 18 октября 2011 г.

Новый Xcode 4.2 меня разочаровал

Новый Xcode 4.2 меня разочаровал примерно в том же отношении, как меня лет 10 тому назад основательно разочаровал Windows 98 (тогда приходилось как минимум каждый час нажимать кнопку Reset). Тогда я всерьёз решил перейти на Linux (хотя Линукс имхо хорошо подходит для людей, готовых в любой момент серьёзно заниматься именно Линуксом, то есть Линукс - это не инструмент для решения таких задач, где можно забыть про инструмент и решать задачи, а Линукс - это инструмент для овладения инструмента под названием Линукс. Но это моё мнение).

Так вот, Xcode 4.2 постоянно преподносит мне какие-то сюрпризы... Совершенно запутанные и нелогичные. Я уже втайне начал мечтать заняться по работе другой темой в программировании.

Сейчас истратил полчаса, из-за того, что Xcode утверждал мне о том, что невозможно использовать StoryBoard в IOS 4.3 и более ранних, хотя я многократно переключал DeploymentTarget в IOS 5.0. Оказывается, кроме моих действий (Clean не помогает) нужно ещё и поменять хотя бы что-то в исходниках, и снова сбилдить приложение. Жопа, жопа, жопа...

Много ещё и других глюков (столько глюков сразу в Xcode не было ни разу, хотя в этой новой версии много хороших задумок). Неужели после того, как Apple осталась без Стива Джобса, эта компания обречена потерять лидерские позиции? Я думаю, что очень даже может быть. Любое могущество основано на могуществе личности (это я прочитал у Наполеона Хилла).

четверг, 6 октября 2011 г.

Функция поворота CGImage

Материал взят из http://connordenman.wordpress.com/2010/09/18/rotation-of-cgimage-iphoneipad-improved/

- (CGImageRef)CGImageRotatedByAngle:(CGImageRef)imgRef angle:(CGFloat)angle
{
CGFloat angleInRadians = angle * (M_PI / 180);
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);

CGRect imgRect = CGRectMake(0, 0, width, height);
CGAffineTransform transform = CGAffineTransformMakeRotation(angleInRadians);
CGRect rotatedRect = CGRectApplyAffineTransform(imgRect, transform);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bmContext = CGBitmapContextCreate(NULL,
rotatedRect.size.width,
rotatedRect.size.height,
8,
0,
colorSpace,
kCGImageAlphaPremultipliedFirst);
CGContextSetAllowsAntialiasing(bmContext, YES);
CGContextSetInterpolationQuality(bmContext, kCGInterpolationHigh);
CGColorSpaceRelease(colorSpace);
CGContextTranslateCTM(bmContext,
+(rotatedRect.size.width/2),
+(rotatedRect.size.height/2));
CGContextRotateCTM(bmContext, angleInRadians);
CGContextDrawImage(bmContext, CGRectMake(-width/2, -height/2, width, height),
imgRef);

CGImageRef rotatedImage = CGBitmapContextCreateImage(bmContext);
CFRelease(bmContext);
[(id)rotatedImage autorelease];

return rotatedImage;
}

среда, 5 октября 2011 г.

Сохранение UIImage в png или jpeg файл

Материал взят из http://iphonedevelopertips.com/data-file-management/save-uiimage-object-as-a-png-or-jpeg-file.html

// Create paths to output images
NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.png"];
NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"];

// Write a UIImage to JPEG with minimum compression (best quality)
// The value 'image' must be a UIImage object
// The value '1.0' represents image compression quality as value from 0.0 to 1.0
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];

// Write image to PNG
[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES];

// Let's check to see if files were successfully written...

// Create file manager
NSError *error;
NSFileManager *fileMgr = [NSFileManager defaultManager];

// Point to Document directory
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

// Write out the contents of home directory to console
NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]);

воскресенье, 2 октября 2011 г.

Проверка валидности email

- (BOOL) validateEmail: (NSString *) candidate
{
NSString *emailRegex = @ "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2, 4} ";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@ "SELF MATCHES %@ ", emailRegex];
return [emailTest evaluateWithObject:candidate];
}
Код взят из http://stackoverflow.com/questions/800123/best-practices-for -validating-email-address-in-objective-c-on-ios-2-0

Постоянные читатели