SlideShare a Scribd company logo
Расширенные
возможности устройств
Разработка приложений для iOS
Лекция 11
Глеб Тарасов
gleb34@gmail.com
Вспомним прошлое
занятие
Какие UIViewController от Apple
работают только на iPad?
Какие UIViewController от Apple
работают только на iPad?
UIPopoverController, UISplitViewController
Какие есть два вида
автоматического растягивания
интерфейсов в iOS?
Какие есть два вида
автоматического растягивания
интерфейсов в iOS?
старый и более простой Autosizing,
новый и мудреный Autolayout
Как отключить AutoLayout в
StoryBoard?
Как отключить AutoLayout в
StoryBoard?
снять галку «use auto layout»
в первой вкладке справа
Акселерометр,
гироскоп
Ориентация
UIInterfaceOrientation orientation =
[UIApplication sharedApplication].statusBarOrientation;
!
if (UIInterfaceOrientationIsPortrait(orientation))
NSLog(@"portrait");
else
NSLog(@"landscape");
typedef enum {
UIInterfaceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft,
UIInterfaceOrientationLandscapeRight
} UIInterfaceOrientation;
Когда телефон лежит на столе:	

x = 0	

y = 0	

z = -1
ускорение +1.0g вдоль этой оси
1.0 по оси
Акселерометр
- (void)viewDidLoad
{
[super viewDidLoad];
self.manager = [[CMMotionManager alloc] init];
[self.manager startAccelerometerUpdates];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1/30.0
target:self
selector:@selector(doAccUpdate)
userInfo:nil
repeats:YES];
}
- (void)doAccUpdate
{
CMAcceleration acc = self.manager.accelerometerData.acceleration;
NSLog(@"%g %g %g", acc.x, acc.y, acc.z);
}
#import <CoreMotion/CoreMotion.h>
Гироскоп
- (void)viewDidLoad
{
[super viewDidLoad];
self.motionManager = [[CMMotionManager alloc] init];
[self.manager startGyroUpdates];
!
self.timer = [NSTimer scheduledTimerWithTimeInterval:1/30.0
target:self
selector:@selector(doGyroUpdate)
userInfo:nil
repeats:YES];
}
- (void)doGyroUpdate
{
CMRotationRate rate = self.motionManager.gyroData.rotationRate;
NSLog(@"%g %g %g", rate.x, rate.y, rate.z);
}
радианы в секунду
#import <CoreMotion/CoreMotion.h>
- (void)viewDidLoad
{
[super viewDidLoad];
self.manager = [[CMMotionManager alloc] init];
}
!
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.manager startGyroUpdates];
self.timer = ...
}
!
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.timer invalidate];
[self.manager stopGyroUpdates];
}
Фильтр нижних
частот
http://developer.apple.com/library/ios/#samplecode/
AccelerometerGraph/Introduction/Intro.html
http://ru.wikipedia.org/wiki/Фильтр_нижних_частот
Геолокация
self.manager = [[CLLocationManager alloc] init];
self.manager.delegate = self;
self.manager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[self.manager startUpdatingLocation];
@interface MyViewController : UIViewController<CLLocationManagerDelegate>
- (void)locationManager:(CLLocationManager *)m
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
CLLocationCoordinate2D coord = newLocation.coordinate;
NSLog(@"%g %g", coord.latitude, coord.longitude);
}
Координаты
Центр Москвы: 55.747598, 37.626801
Компас
- (void)locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLHeading *)newHeading
{
NSLog(@"%g", newHeading.magneticHeading);
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager setDelegate:self];
[self.locationManager startUpdatingHeading];
0 - север, 90 - восток, 180 - юг, 270 - запад
Воспроизведение аудио
AVAudioPlayer
NSString *path = [[NSBundle mainBundle] pathForResource:@"file"
ofType:@"mp3"];
NSURL *url = [NSURL fileURLWithPath:path];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:nil];
[player play];
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent
{
if (receivedEvent.type == UIEventTypeRemoteControl)
{
switch (receivedEvent.subtype)
{
case UIEventSubtypeRemoteControlPlay:
[self.player play];
break;
case UIEventSubtypeRemoteControlPause:
[self.player pause];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[self prevTrack];
break;
case UIEventSubtypeRemoteControlNextTrack:
[self nextTrack];
break;
default:
break;
}
}
}
- (void) viewDidAppear:(BOOL)animated
{
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
- (IBAction)buttonTapped
{
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback
error:nil];
[[AVAudioSession sharedInstance] setActive:YES
error:nil];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"ddt"
withExtension:@"mp3"];
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:nil];
[self.player play];
}
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
UIImage *img = [UIImage imageNamed:@"ddt"];
MPMediaItemArtwork *art = [[MPMediaItemArtwork alloc] initWithImage:img];
!
NSDictionary *dict = @{ MPMediaItemPropertyTitle : @"Свобода",
MPMediaItemPropertyAlbumTitle : @"Иначе",
MPMediaItemPropertyAlbumTrackNumber : @15,
MPMediaItemPropertyAlbumTrackCount : @16,
MPMediaItemPropertyArtist : @"ДДТ",
MPMediaItemPropertyPlaybackDuration : @125,
MPNowPlayingInfoPropertyPlaybackRate : @1,
MPMediaItemPropertyGenre : @"Рок",
MPMediaItemPropertyArtwork : art };
!
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = dict;
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
AVQueuePlayer
NSURL *url1 = [[NSBundle mainBundle] URLForResource:@"song1"
withExtension:@"mp3"];
NSURL *url2 = [[NSBundle mainBundle] URLForResource:@"song2"
withExtension:@"mp3"];
NSURL *url3 = [[NSBundle mainBundle] URLForResource:@"song3"
withExtension:@"mp3"];
AVPlayerItem *item1 = [[AVPlayerItem alloc] initWithURL:url1];
AVPlayerItem *item2 = [[AVPlayerItem alloc] initWithURL:url2];
AVPlayerItem *item3 = [[AVPlayerItem alloc] initWithURL:url3];
NSArray *items = @[ item1, item2, item3 ];
self.player = [[AVQueuePlayer alloc] initWithItems:items];
[self.player play];
Воспроизведение видео
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
- (IBAction)buttonTapped
{
NSURL *url = [[NSBundle mainBundle] URLForResource:@"sample"
withExtension:@"mp4"];
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc]
initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:vc];
}
Фото и видео
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
Фото с камеры
UIImagePickerController *c = [[UIImagePickerController alloc] init];
c.sourceType = UIImagePickerControllerSourceTypeCamera;
c.delegate = self;
c.mediaTypes = @[ (NSString *)kUTTypeImage ];
!
[self presentViewController:c animated:YES completion:nil];
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *img = info[UIImagePickerControllerEditedImage];
NSLog(@"img %@", img);
[picker dismissViewControllerAnimated:YES completion:nil];
}
#import <MobileCoreServices/MobileCoreServices.h>
Фото из библиотеки
UIImagePickerController *c = [[UIImagePickerController alloc] init];
c.delegate = self;
c.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
c.mediaTypes = @[ (NSString *)kUTTypeImage ];
!
[self presentViewController:c animated:YES completion:nil];
#import <MobileCoreServices/MobileCoreServices.h>
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств
Видео с камеры
UIImagePickerController *c = [[UIImagePickerController alloc] init];
c.sourceType = UIImagePickerControllerSourceTypeCamera;
c.delegate = self;
c.mediaTypes = @[ (NSString *)kUTTypeMovie ];
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSURL *videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];
NSLog(@"%@", videoUrl);
[picker dismissViewControllerAnimated:YES completion:nil];
}
Работа с микрофоном
http://developer.apple.com/library/ios/#samplecode/
SpeakHere/Introduction/Intro.html
SpeakHere
iBeacon
http://habrahabr.ru/company/touchinstinct/blog/195104/
Уведомления
local 	

notifications
remote 	

notifications
Local
+ (void)addNotificationForDate:(NSDate *)date
{
UILocalNotification *n = [[UILocalNotification alloc] init];
n.fireDate = date;
n.timeZone = [NSTimeZone defaultTimeZone];
n.alertBody = @"Уведомление";
n.alertAction = @"Открыть";
n.soundName = UILocalNotificationDefaultSoundName;
n.applicationIconBadgeNumber = 1;
n.userInfo = @{ @"custom_id" : @12 };
[[UIApplication sharedApplication] scheduleLocalNotification:n];
}
- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)n
{
if (application.applicationState == UIApplicationStateActive)
return;
!
NSNumber *num = n.userInfo[@"custom_id"];
// реагируем на уведомление
}
В AppDelegate:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
UILocalNotification *n =
launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (n)
{
// реагируем на уведомление
}
...
}
Remote
apns-php https://code.google.com/p/apns-php/
ruby apns https://github.com/jpoz/APNS
Как сгенерировать сертификат: https://code.google.com/p/apns-php/wiki/CertificateCreation
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[UIApplication.sharedApplication registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeAlert
| UIRemoteNotificationTypeSound
| UIRemoteNotificationTypeBadge)];
...
}
В AppDelegate:
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// отправляем токен на сервер
}
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// если было активно - ничего не делаем
if (application.applicationState == UIApplicationStateActive)
{
return;
}
// и тут реагируем на уведомление
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
NSDictionary *userInfo =
launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfo)
{
// тут реагируем на уведомление
}
...
}
Распознавание жестов
UIGestureRecognizer
- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
UIView:
UITapGestureRecognizer
UITapGestureRecognizer *t = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(tapped)];
t.numberOfTapsRequired = 1;
t.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:t];
UIPanGestureRecognizer
UIPanGestureRecognizer *p = [[UIPanGestureRecognizer alloc]
initWithTarget:self
action:@selector(pan:)];
[self.view addGestureRecognizer:p];
- (void)pan:(UIPanGestureRecognizer *)sender
{
CGPoint t = [sender translationInView:self.view];
CGPoint v = [sender velocityInView:self.view];
NSLog(@"%@", NSStringFromCGPoint(t));
NSLog(@"%@", NSStringFromCGPoint(v));
}
UIPinchGestureRecognizer
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]
initWithTarget:self
action:@selector(pinch:)];
[self.view addGestureRecognizer:pinch];
- (void)pinch:(UIPinchGestureRecognizer *)sender
{
CGFloat scale = sender.scale;
NSLog(@"%g", scale);
}
UIRotationGestureRecognizer
UIRotationGestureRecognizer *r = [[UIRotationGestureRecognizer alloc]
initWithTarget:self
action:@selector(rotate:)];
[self.view addGestureRecognizer:r];
- (void)rotate:(UIRotationGestureRecognizer *)sender
{
CGFloat r = sender.rotation;
NSLog(@"%g", r);
}
• UISwipeGestureRecognizer 	

• UILongPressGestureRecognizer
UISwipeGestureRecognizer *s = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(pan:)];
s.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:s];
UILongPressGestureRecognizer *p = [[UISwipeGestureRecognizer alloc]
initWithTarget:self
action:@selector(pan:)];
p.minimumPressDuration = 0.5;
[self.view addGestureRecognizer:p];
UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:
(UIGestureRecognizer *)otherGestureRecognizer;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch;
UIGestureRecognizerState
typedef enum {
UIGestureRecognizerStatePossible,
!
UIGestureRecognizerStateBegan,
!
UIGestureRecognizerStateChanged,
!
UIGestureRecognizerStateEnded,
!
UIGestureRecognizerStateCancelled,
UIGestureRecognizerStateFailed,
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded
} UIGestureRecognizerState;
Домашнее задание
• продумать, что из пройденного можно
использовать в вашем приложении	

• добавить поддержку	

• если ничего — поиграться в отдельном
приложении
Всё!
Глеб Тарасов	

gleb34@gmail.com	

twitter.com/pilot34

More Related Content

PDF
Puppet modules for Fun and Profit
PPTX
Expression Language 3.0
PDF
SegapRESTAPI1.0 specifications
PDF
Google I/O 2021 Recap
PDF
iOS NotificationService
PDF
st_launcher: Tonel-based Smalltalk shell Scripts
PDF
Python eggs (RO)
TXT
Super heroes training_simulator
Puppet modules for Fun and Profit
Expression Language 3.0
SegapRESTAPI1.0 specifications
Google I/O 2021 Recap
iOS NotificationService
st_launcher: Tonel-based Smalltalk shell Scripts
Python eggs (RO)
Super heroes training_simulator

What's hot (8)

PDF
Go Web Development
PDF
HTML5: Building for a Faster Web
PDF
YUI on the go
PDF
Tips and tricks for setting up a Play 2 project
PDF
Django for mobile applications
PPSX
Symfony2 meets propel 1.5
PPTX
Phaser presentation
KEY
Beginner's Sinatra
Go Web Development
HTML5: Building for a Faster Web
YUI on the go
Tips and tricks for setting up a Play 2 project
Django for mobile applications
Symfony2 meets propel 1.5
Phaser presentation
Beginner's Sinatra
Ad

Viewers also liked (18)

PDF
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
PDF
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
PDF
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
PDF
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
PDF
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
PDF
Архитектура компилятора Swift
PDF
Преимущества и недостатки языка Swift
PDF
CS193P Lecture 5 View Animation
PDF
Rambler.iOS #6: App delegate - разделяй и властвуй
PDF
Denis Lebedev, Swift
PDF
Мобильный веб: назад в будущее
PDF
Технологии vs коммуникации: что важнее?
PPTX
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
PDF
Как автотесты ускоряют релизы в OK.ru
PDF
TechLeads meetup: Макс Лапшин, Erlyvideo
PPTX
TechLeads meetup: Евгений Потапов, ITSumma
PDF
TechLeads meetup: Алексей Рыбак, Badoo
PPTX
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Интуит. Разработка приложений для iOS. Лекция 12. Тестирование, публикация и др.
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Роман Бусыгин "Yandex Map Kit для iOS в примерах"
Архитектура компилятора Swift
Преимущества и недостатки языка Swift
CS193P Lecture 5 View Animation
Rambler.iOS #6: App delegate - разделяй и властвуй
Denis Lebedev, Swift
Мобильный веб: назад в будущее
Технологии vs коммуникации: что важнее?
Багфиксинг процесса разработки в iOS: взгляд с двух сторон
Как автотесты ускоряют релизы в OK.ru
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
Ad

Similar to Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств (20)

PDF
Adopting 3D Touch in your apps
PPT
Iphone and Ipad development Game with Cocos2D
PDF
watchOS 2でゲーム作ってみた話
KEY
漫游iOS开发指南
PDF
Compose로 Android:Desktop 멀티플랫폼 만들기.pdf
PDF
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
PDF
Cocoaheads Montpellier Meetup : 3D Touch for iOS
PDF
Bringing Characters to Life for Immersive Storytelling - Dioselin Gonzalez
PDF
Ruby motion勉強会 2012年7月
PPTX
Bringing characters to life for immersive storytelling
PDF
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
PPTX
iOS Einstieg und Ausblick - Mobile DevCon 2011 - OPITZ CONSULTING -Stefan Sch...
KEY
I phone勉強会 (2011.11.23)
PDF
iOS 7 SDK特訓班
KEY
занятие8
PDF
Webエンジニアから見たiOS5
PDF
From Android NDK To AOSP
PPTX
ioS Einstieg und Ausblick - Mobile DevCon Hamburg 2011 - OPITZ CONSULTING - S...
PDF
Developing iOS REST Applications
KEY
Paris js extensions
Adopting 3D Touch in your apps
Iphone and Ipad development Game with Cocos2D
watchOS 2でゲーム作ってみた話
漫游iOS开发指南
Compose로 Android:Desktop 멀티플랫폼 만들기.pdf
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Cocoaheads Montpellier Meetup : 3D Touch for iOS
Bringing Characters to Life for Immersive Storytelling - Dioselin Gonzalez
Ruby motion勉強会 2012年7月
Bringing characters to life for immersive storytelling
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
iOS Einstieg und Ausblick - Mobile DevCon 2011 - OPITZ CONSULTING -Stefan Sch...
I phone勉強会 (2011.11.23)
iOS 7 SDK特訓班
занятие8
Webエンジニアから見たiOS5
From Android NDK To AOSP
ioS Einstieg und Ausblick - Mobile DevCon Hamburg 2011 - OPITZ CONSULTING - S...
Developing iOS REST Applications
Paris js extensions

More from Глеб Тарасов (20)

PDF
Gleb Tarasov. Portfolio
PDF
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
PDF
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
PDF
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
PDF
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
PDF
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
PPT
Презентация проекта Ulect
PDF
Презентация для Foundation Institute
PDF
Делаем жизнь лучше с CocoaPods
PDF
msumobi2. Лекция 2
PDF
msumobi2. Лекция 1
PDF
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
PDF
Школа-студия разработки для iOS. Лекция 4. Работа с данными
PDF
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
PDF
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
PDF
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
PDF
ShareKit. Evernote Dev Meetup
PDF
Глеб Тарасов. Портфолио
PDF
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты
Gleb Tarasov. Portfolio
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Презентация проекта Ulect
Презентация для Foundation Institute
Делаем жизнь лучше с CocoaPods
msumobi2. Лекция 2
msumobi2. Лекция 1
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
ShareKit. Evernote Dev Meetup
Глеб Тарасов. Портфолио
Курсы по мобильной разработке под iOS. 6 лекция. Инструменты

Recently uploaded (20)

PPTX
Pharma ospi slides which help in ospi learning
PDF
01-Introduction-to-Information-Management.pdf
PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
Lesson notes of climatology university.
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PDF
Anesthesia in Laparoscopic Surgery in India
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PDF
Sports Quiz easy sports quiz sports quiz
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PDF
Classroom Observation Tools for Teachers
PPTX
PPH.pptx obstetrics and gynecology in nursing
PDF
Basic Mud Logging Guide for educational purpose
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
RMMM.pdf make it easy to upload and study
Pharma ospi slides which help in ospi learning
01-Introduction-to-Information-Management.pdf
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Lesson notes of climatology university.
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
Anesthesia in Laparoscopic Surgery in India
2.FourierTransform-ShortQuestionswithAnswers.pdf
Microbial diseases, their pathogenesis and prophylaxis
STATICS OF THE RIGID BODIES Hibbelers.pdf
Sports Quiz easy sports quiz sports quiz
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Abdominal Access Techniques with Prof. Dr. R K Mishra
Classroom Observation Tools for Teachers
PPH.pptx obstetrics and gynecology in nursing
Basic Mud Logging Guide for educational purpose
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
RMMM.pdf make it easy to upload and study

Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности устройств