iСвиник Администрация
Сообщения : 1023 Очки : 1780 Репутация : 9
| Тема: Для новичков в программировании Ср Сен 15, 2010 11:35 am | |
| Новенький в программировании? Вот информация, которая тебе поможет. - Как сделать анимацию или подгрузить анимированный GIF?:
GIF грузить не получится стандартными средствами SDK, так что если речь идет не о анимации в OpenGL, то делайте так: 1. создаете UIImageView2. грузите серию изображений вашей анимации как массив UIImage объектов 3. проставляете массив изображений для свойства animationImages в UIImageView4. устанавливаете продолжительность анимации в свойстве animationDuration5. startAnimating для UIImageView - Код:
-
NSArrray *theImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"image_1.png"], [UIImage imageNamed:@"image_2.png"], [UIImage imageNamed:@"image_3.png"], [UIImage imageNamed:@"image_4.png"], [UIImage imageNamed:@"image_5.png"], nil];
UIImageView *anImageView = ... //мембер класса, или создаете по месту, не важно
anImageView.animationImages = theImages; anImageView.animationDuration = 1.0; // 1 секунда
[anImageView startAnimating];
- Как получить доступ к членам класса если для них не объявлены @property или аксесоры?:
Очень просто smile.gif читаем на предмет KVC (Key-Value Coding) в частности valueForKey: и setValue:forKey: пример: будем устанавливать фактор торможения для UIScrollView (справедливо так же для остальных наследников). - Код:
-
// в классе делегата UIScrollView пишем такое - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { [scrollView setValue:[NSValue valueWithCGSize:CGSizeMake(0.98, 0.98)] forKey:@"_decelerationFactor"]; } ЗЫ: главное помните что valueForKey: и setValue:forKey: работают только с объектами, так что NSValue вам в помощь.
- Как создать отдельный поток в котором я бы мог обрабатывать свои данные?:
для этого неплохо сначала почитать о многопоточности и синхронизации, чтобы иметь представление с чем кушать. итак: 1. не заморачивайтесь с NSThread, всеравно все основные опреации этого класса поддерживаются только внутри потока, а для каждого потока вы можете спокойно получить такой объект с помочью [NSThread currentThread]. лучше создайте поток с помочью performSelectorInBackground:withObject:. 2. используйте свои ресурсы эффективно, если у вас на данных момент нет данных для обработки, то нет необходимости завершать поток или крутить его в холостую, используйте объекты синхронизации NSLock и NSCondition. 3. создайте локальный NSAutoreleasePool в своем цикле обработки данны, потому что все данные которые вы будете заталкивать в авторелиз пул освободятся только на выходе из потока, а до этого вы можете быстро загадить память телефона. 4. если требуется сделать вызов селектора в основном потоке, то вызывайте его с помощью performSelectorOnMainThread:withObject:waitUntilDone:
- Работа с датой/временем:
Насколько я могу судить по собственному опыту, функции работы с календарями/датами достаточно низкоуровневы и простейшие операции, типа прибавления/убавления месяца/дня/часа и т.п. превращаются в разборки с "молекулами". Мои поиски решения в сети показали мне следующий класс THCalendarInfo ( [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]). Вообще, он для Mac OS X, но удаление NSCalendarDate делает его совместимым с iPhoneOS.
- Как сделать потокобезопасную очередь?:
Читаем о том что такое многозадачность, что такое NSCondition и далее смотрим в приатаченный архив. теперь о том как заюзать: - Код:
-
- (void)sendData:(id)data { [[self commandQueue] enqueue:data]; }
- (ASafeThreadedQueue *)commandQueue { if (nil == _commandQueue) { _commandQueue = [ASafeThreadedQueue new]; [self performSelectorInBackground:@selector(startCommandQueue:) withObject:_commandQueue]; } return _commandQueue; }
- (void)startCommandQueue:(ASafeThreadedQueue *)commandQueue { id anData = nil; while (anData = [commandQueue dequeue]) { NSAutoreleasePool *localPool = [NSAutoreleasePool new]; NSMutableURLRequest *theRequest = [[NSMutableURLRequest new] autorelease]; [theRequest setURL:[NSURL URLWithString:@"..."]]; [theRequest setHTTPMethod:@"POST"]; [theRequest setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"]; [theRequest setHTTPBody:anData];
NSURLResponse *theResponse = nil; NSError *theError = nil; NSData *theData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError]; if (theData) { ... // то что вы хотите сделать с полученными данными } else { // выводим ашипки } [localPool release]; } }
- Как перекрасить UIAlertView?:
По сути дела никак, UIAlertView на вызове show проставляет для своего леера изображение, так что красить не только бесполезно, но и не эстетично в виду того что окрашивается вся прямоугольная область вьюшки. что делать? очевидно что надо подменить изображение: - Код:
-
UIAlertView *theAlert = [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Atention", nil) message:NSLocalizedString(@"Possibly network or remote host is not reachable now, please try again later.", nil) delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease]; [theAlert show];
UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"]; [theTitle setTextColor:[UIColor redColor]];
UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"]; [theBody setTextColor:[UIColor blueColor]];
UIImage *theImage = [UIImage imageNamed:@"Background.png"]; theImage = [theImage stretchableImageWithLeftCapWidth:16 topCapHeight:16]; CGSize theSize = [theAlert frame].size; UIGraphicsBeginImageContext(theSize); [theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)]; theImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [[theAlert layer] setContents:[theImage CGImage]];
- Проигрывание мелодий с помощью AVFounation:
Подключаем фрэймворк /System/Library/Frameworks/AVFoundation.frameworkВ прикрепленном архиве пример класса для использования AVAudioPlayerВ своем классе подключаем AudioControl - Код:
-
#import "AudioControl.h" @class AudioControl; Для проигрывания мелодии пишем: - Код:
-
audioControl = [AudioControl alloc]; [audioControl Play]; Не забудьте потом высвободить память! Обзор возможностей AVAudioPlayer можно прочитать вот тут: [Вы должны быть зарегистрированы и подключены, чтобы видеть эту ссылку]
- Как снимать значения с акселерометра?:
Для начала создаем переменную - Код:
-
UIAccelerometer *acc; модифицируем метод, вызываемый при изменении положения акселерометра(на симуляторе этот метод не вызывается никогда, а на девайсе вызывается всегда, даже когда просто лежит на столе) - Код:
-
-(void) accelerometer:(UIAccelerometer*)acc didAccelerate:(UIAcceleration*)acceleration{ //ваш код } получение координат акселерометра проходит в выше сказанном методе: - Код:
-
UIAccelerationValue x,y,z; x=acceleration.x; y=acceleration.y; z=acceleration.z;
//если девайс стоит идеально вертикально, то значения x,y,z =0;
- Как перевернуть UILabel в другую сторону?:
Пример вращения надписи на 90 градусов по часовой стрелке: - Код:
-
label.transform = CGAffineTransformMakeRotation (+3.14/2);
- Как программно отключить автоматическую блокировку?:
- Код:
-
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
- Как программно завершить приложение?:
- Код:
-
exit(0); Цензоры Аппстора уже не пропускают приложения, использующие эту функцию!
- Как открыть страницу в браузере по ссылке в приложении?:
- Код:
-
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.iguides.ru/"]]
- Как открыть Mail.app с заданным адресом из приложения?:
- Код:
-
NSString * url = [NSString stringWithFormat: @"mailto:%@?subject=%@&body=%@", toEmail, EncodedSubject, EncodedContent ]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]]
- Как программно добавить View в window:
- Код:
-
UIView *currentView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, window.frame.size.width, window.frame.size.height)]; [window addSubview:currentView];
- Создание/Чтение/Удаление Файла/Директории:
Инициализация директории - Код:
-
// For error information NSError *error;
// Create file manager NSFileManager *fileMgr = [NSFileManager defaultManager];
// Point to Document directory NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; Создание файла - Код:
-
// File we want to create in the documents directory // Result is: /Documents/file1.txt NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"file1.txt"];
// String to write NSString *str = @"iPhone Developer Tips\nhttp://iPhoneDevelopTips,com";
// Write the file [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error]; Чтение директории - Код:
-
// Show contents of Documents directory NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]); Перемещение файла - Код:
-
// Rename the file, by moving the file NSString *filePath2 = [documentsDirectory stringByAppendingPathComponent:@"file2.txt"];
// Attempt the move if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES) NSLog(@"Unable to move file: %@", [error localizedDescription]); Удаление файла - Код:
-
// Attempt to delete the file at filePath2 if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES) NSLog(@"Unable to delete file: %@", [error localizedDescription]);
- Как Позвонить/Отправить смс или почту из приложения?:
Набор номера - Код:
-
openURL:[NSURL URLWithString:@"tel://123456"]]; Отправка СМС - Код:
-
openURL:[NSURL URLWithString:@"sms:123456"]]; Отправка почты - Код:
-
openURL:[NSURL URLWithString:@"mailto:ihelp-site@mail.ru?subject=Hello&body=Проверка."]];
|
|