Начало работы
Использование фреймворка
Ожидания## Эффектные изображения
Изображение опубликовано (просмотреть сетевые изображения, макет потока)
Изображение не опубликовано (загрузка локальных изображений, публикация, просмотр)
Сянмао Шаньюй мобильное офисное программное обеспечение Айньугу Хуайсиньминдао
Опубликовано (просмотр сетевых изображений)
Неопубликовано (загрузка локальных изображений / публикация / предварительный просмотр)
Поточное размещение
, Линейное размещение
Клик
, Двойной клик
, Сжатие
, Поворот
, Перетаскивание
, Сторона экрана
## Где используется этот фреймворк
Основное применение — социальные приложения, для отображения группы изображений
Ниже приведены скриншоты некоторых популярных социальных приложений
MBProgressHUD
SDWebImage
DACircularProgress
@interface PYPhotosView : UIScrollView
/** Делегат */
@property (nonatomic, weak) id<PYPhotosViewDelegate> delegate;
```/** Массив моделей сетевых изображений */
@property (nonatomic, copy) NSArray *photos;
/** Массив URL-адресов сетевых изображений (миниатюры) */
@property (nonatomic, copy) NSArray *thumbnailUrls;
/** Массив URL-адресов сетевых изображений (полностью размерные) */
@property (nonatomic, copy) NSArray *originalUrls;
/** Массив локальных изображений альбома (по умолчанию до девяти штук, если количество переданных изображений больше девяти, берутся первые девять) */
@property (nonatomic, strong) NSMutableArray *images;
```/**
Состояние всех изображений (по умолчанию — опубликовано)
*/
@property (nonatomic, assign) PYPhotosViewState photosState;
``````markdown
/**
Тип расположения изображений (по умолчанию — последовательное расположение)
*/
@property (nonatomic, assign) PYPhotosViewLayoutType layoutType;
/**
Тип индикации страниц изображений (по умолчанию — pageControl. При превышении количества изображений более чем девяти, используется label для отображения)
*/
@property (nonatomic, assign) PYPhotosViewPageType pageType;
/** Отступ между картинками (по умолчанию 5) */
@property (nonatomic, assign) CGFloat photoMargin;
/** Ширина картинки (по умолчанию 70) */
@property (nonatomic, assign) CGFloat photoWidth;
/** Высота картинки (по умолчанию 70) */
@property (nonatomic, assign) CGFloat photoHeight;
/** Максимальное количество картинок в ряду (по умолчанию 3), данная настройка неактивна при линейной компоновке */
@property (nonatomic, assign) NSInteger photosMaxCol;
/** Максимальное количество загружаемых изображений до отправки (по умолчанию 9) */
@property (nonatomic, assign) NSInteger imagesMaxCountWhenWillCompose;
/** Быстрое создание объекта photosView */
+ (instancetype)photosView;
/** photos : массив с URL-адресами миниатюр */
+ (instancetype)photosViewWithThumbnailUrls:(NSArray *)thumbnailUrls originalUrls:(NSArray *)originalUrls;
/** images : массив с локальными изображениями */
+ (instancetype)photosViewWithImages:(NSMutableArray *)images;
/**
* thumbnailUrls : массив с URL-адресами миниатюр
* originalUrls : массив с URL-адресами полноразмерных изображений
* type : тип компоновки (по умолчанию потоковая компоновка)
*/
+ (instancetype)photosViewWithThumbnailUrls:(NSArray *)thumbnailUrls originalUrls:(NSArray *)originalUrls layoutType:(PYPhotosViewLayoutType)type;
/**
/**
@end
###PYPhotoBrowseView (пользовательский)
@protocol PYPhotoBrowseViewDelegate <NSObject>
@optional
/**
* Вызывается перед отображением просмотра изображений
*/
- (void)photoBrowseView:(PYPhotoBrowseView *)photoBrowseView willShowWithImages:(NSArray *)images index:(NSInteger)index;
/**
* Вызывается после отображения просмотра изображений
*/
- (void)photoBrowseView:(PYPhotoBrowseView *)photoBrowseView didShowWithImages:(NSArray *)images index:(NSInteger)index;
/**
* Вызывается перед скрытием просмотра изображений
*/
- (void)photoBrowseView:(PYPhotoBrowseView *)photoBrowseView willHideWithImages:(NSArray *)images index:(NSInteger)index;
/**
* Вызывается после скрытия просмотра изображений
*/
- (void)photoBrowseView:(PYPhotoBrowseView *)photoBrowseView didHideWithImages:(NSArray *)images index:(NSInteger)index;
/**
* Вызывается при одиночном клике на изображение
*/
- (void)photoBrowseView:(PYPhotoBrowseView *)photoBrowseView didSingleClickImage:(UIImage *)image index:(NSInteger)index;
/**
* Вызывается при долгом нажатии на изображение
*/
- (void)photoBrowseView:(PYPhotoBrowseView *)photoBrowseView didLongPressImage:(UIImage *)image index:(NSInteger)index;
@end
@protocol PYФотоПросмотрDataSource
@optional /** Возвращает массив изображений (UIImage), которые будут просматриваться */
/** Возвращает массив URL изображений (NSString), если реализован метод - (NSArray *)imagesForBrowse; этот метод будет игнорирован */
/** Возвращает индекс по умолчанию для отображаемого изображения (по умолчанию равно 0) */
- (NSInteger)currentIndex;
/** Определяет положение по умолчанию относительно главного окна */
- (CGRect)frameFormWindow;
/** Определяет положение при скрытии относительно главного окна */
- (CGRect)frameToWindow;
@end
@interface PYФотоПросмотр : UIWindow <PYФотоПросмотрДелегат>
/** Делегат */
@property (nonatomic, weak) id<PYФотоПросмотрДелегат> delegate;
/** Дата-сурс делегат */
@property (nonatomic, weak) id<PYФотоПросмотрDataSource> dataSource;
/** Массив изображений (UIImage), используемых для просмотра
* Рекомендуется передавать UIImage, который уже был скачан. Для асинхронной загрузки используйте imagesURL
* При установке этого свойства, imagesURL становится недействительным
*/
@property (nonatomic, copy) NSArray *images;
/** Массив URL изображений (NSString), используемых для просмотра */
@property (nonatomic, copy) NSArray *imagesURL;
/** Массив контроллеров изображений (UIImageView), используемых для просмотра */
@property (nonatomic, copy) NSArray *sourceImageViews;
/** Указывает текущий индекс */
@property (nonatomic, assign) NSInteger currentIndex;
/** Положение по умолчанию относительно главного окна (то есть с какой части окна начинать отображение),
* Обратите внимание: при установке этого свойства, showFromView становится недействительным
*/
@property (nonatomic, assign) CGRect frameFormWindow;
/** Указывает, с какого UIImageView начинается постепенное увеличение изображения */
@property (nonatomic, strong) UIView *showFromView;
```
```markdown
## <a id="как-использовать-pyphotobrowser"></a>Как использовать PYPhotoBrowser
* Использование Cocoapods:
- `pod "PYPhotoBrowser"`
- Импортировать основной заголовочный файл `#import <PYPhotoBrowser/PYPhotoBrowser.h>`
* Ручное импортирование:
- Перетянуть все файлы из папки `PYPhotoBrowser` в проект
- Импортировать основной заголовочный файл `#import "PYPhotoBrowser/PYPhotoBrowser.h"`
- **Внимание:** если проект уже использует сторонние библиотеки: `MBProgressHUD`, `SDWebImage`, `DACircularProgress`, то повторное импортирование не требуется. В противном случае выберите необходимые библиотеки из папки `Dependency` и перетяните их в проект.
### <a id="конкретное-использование-детали-см-пример-программы-pyphotobrowserexample"></a>Конкретное использование (детали см. пример программы PYPhotoBrowserExample)
Пример кода:
```
```objc
/** Положение при скрытии относительно главного окна (то есть в какую часть окна скрывается),
* Обратите внимание: при установке этого свойства, hiddenToView становится недействительным
*/
@property (nonatomic, assign) CGRect frameToWindow;
/** Указывает, до какого UIView постепенно уменьшается изображение перед тем, как исчезнуть */
@property (nonatomic, strong) UIView *hiddenToView;
/** При повороте экрана, автоматически поворачивает изображение? По умолчанию YES */
@property (nonatomic, assign) BOOL autoRotateImage;
/**
* Отображает изображения
*/
- (void)show;
/**
* Скрывает изображения
*/
- (void)hide;
@end
``````objc```markdown
// 1. Создание массива ссылок на миниатюры изображений
NSMutableArray *thumbnailImageUrls = [NSMutableArray array];
// Добавление ссылок на миниатюры изображений
[thumbnailImageUrls addObject:@"http://ww3.sinaimg.cn/thumbnail/006ka0Iygw1f6bqm7zukpj30g60kzdi2.jpg"];
[thumbnailImageUrls addObject:@"http://ww1.sinaimg.cn/thumbnail/61b69811gw1f6bqb1bfd2j20b4095dfy.jpg"];
[thumbnailImageUrls addObject:@"http://ww1.sinaimg.cn/thumbnail/54477ddfgw1f6bqkbanqoj20ku0rsn4d.jpg"];
[thumbnailImageUrls addObject:@"http://ww4.sinaimg.cn/thumbnail/006ka0Iygw1f6b8gpwr2tj30bc0bqmyz.jpg"];
[thumbnailImageUrls addObject:@"http://ww2.sinaimg.cn/thumbnail/9c2b5f31jw1f6bqtinmpyj20dw0ae76e.jpg"];
[thumbnailImageUrls addObject:@"http://ww1.sinaimg.cn/thumbnail/536e7093jw1f6bqdj3lpjj20va134ana.jpg"];
[thumbnailImageUrls addObject:@"http://ww1.sinaimg.cn/thumbnail/75b1a75fjw1f6bqn35ij6j20ck0g8jtf.jpg"];
[thumbnailImageUrls addObject:@"http://ww2.sinaimg.cn/thumbnail/005NFHyQgw1f6bn8bha0eg308w0gib2d.gif"];
[thumbnailImageUrls addObject:@"http://ww1.sinaimg.cn/thumbnail/86afb21egw1f6bq3lq0itj20gg0c2myt.jpg"];
// 1.2 Создание массива ссылок на полноразмерные изображения
NSMutableArray *originalImageUrls = [NSMutableArray array];
// Добавление ссылок на полноразмерные изображения
[originalImageUrls addObject:@"http://ww3.sinaimg.cn/large/006ka0Iygw1f6bqm7zukpj30g60kzdi2.jpg"];
[originalImageUrls addObject:@"http://ww1.sinaimg.cn/large/61b69811gw1f6bqb1bfd2j20b4095dfy.jpg"];
[originalImageUrls addObject:@"http://ww1.sinaimg.cn/large/54477ddfgw1f6bqkbanqoj20ku0rsn4d.jpg"];
[originalImageUrls addObject:@"http://ww4.sinaimg.cn/large/006ka0Iygw1f6b8gpwr2tj30bc0bqmyz.jpg"];
[originalImageUrls addObject:@"http://ww2.sinaimg.cn/large/9c2b5f31jw1f6bqtinmpyj20dw0ae76e.jpg"];
[originalImageUrls addObject:@"http://ww1.sinaimg.cn/large/536e7093jw1f6bqdj3lpjj20va134ana.jpg"];
[originalImageUrls addObject:@"http://ww1.sinaimg.cn/large/75b1a75fjw1f6bqn35ij6j20ck0g8jtf.jpg"];
[originalImageUrls addObject:@"http://ww2.sinaimg.cn/large/005NFHyQgw1f6bn8bha0eg308w0gib2d.gif"];
[originalImageUrls addObject:@"http://ww1.sinaimg.cn/large/86afb21egw1f6bq3lq0itj20gg0c2myt.jpg"];```markdown
["有点C"是"6.4"]"];
// 2. Создание объекта PYPhotosView
PYPhotosView *photosView = [PYPhotosView photosViewWithThumbnailUrls:thumbnailImageUrls originalUrls:originalImageUrls];
// 3. Добавление объекта PYPhotosView в представление
[self.view addSubview:photosView];
```
Также следует перевести:
- `"有点C"是"6.4"` -> `"Немного C" это "6.4"`
Полный текст с исправлениями:
```markdown
[["Немного C" это "6.4"]];
// 2. Создание объекта PYPhotosView
PYPhotosView *photosView = [PYPhotosView photosViewWithThumbnailUrls:thumbnailImageUrls originalUrls:originalImageUrls];
// 3. Добавление объекта PYPhotosView в представление
[self.view addSubview:photosView];
```
- **Не опубликовано (локальная загрузка изображений)**
Пример кода:
```objc
// 1. Создание массива локальных изображений
NSMutableArray *imagesM = [NSMutableArray array];
for (int i = 0; i < arc4random_uniform(4) + 1; i++) {
[imagesM addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%02d", i + 1]]];
}
// 2.1 Установка локальных изображений
PYPhotosView *photosView = [PYPhotosView photosViewWithImages:imagesM];
// 3. Установка делегата
photosView.delegate = self;
// 4. Добавление photosView
[self.view addSubview:photosView];
```
- **Использование только функции просмотра изображений (с использованием класса PYPhotoBrowseView)**
Пример кода:
```objc
// 1. Создание объекта photoBroseView
PYPhotoBrowseView *photoBroseView = [[PYPhotoBrowseView alloc] init];
// 2.1 Установка массива источников изображений (UIImageView)
photoBroseView.sourceImageViews = imageViews;
// 2.2 Установка текущего индекса изображения (то есть номер нажатого изображения)
photoBroseView.currentIndex = 2;
// 3. Отображение (просмотр)
[photoBroseView show];
```
## <a id="настройка_photosView"></a>Настройка `photosView`
### Изменение свойств объекта `photosView` позволяет настроить его
* Настройка типа макета (по умолчанию используется поточный макет)
```objc
// Установка типа макета как линейный
photosView.layoutType = PYPhotosViewLayoutTypeLine;
```
* Настройка типа страницы (по умолчанию используется `pageControl`)
```objc
// Установка типа страницы как текстовый
photosView.pageType = PYPhotosViewPageTypeLabel;
```
* Настройка расстояния между изображениями (по умолчанию 5)```objc
// Установка расстояния между изображениями в 10 пикселей
photosView.photoMargin = 10;
```
* Настройка размера изображений (по умолчанию 70x70 пикселей)
```objc
// Установка ширины изображения (ширина) в 100 пикселей
photosView.photoWidth = 100;
// Установка высоты изображения (высота) в 60 пикселей
photosView.photoHeight = 60;
```
* Настройка максимального количества изображений в одной строке (по умолчанию 3)
```objc
// Установка максимального количества столбцов изображений в 6
photosView.photosMaxCol = 6;
```
* Настройка максимального количества изображений перед отправкой (по умолчанию 9)
```objc
// Установка максимального количества изображений перед отправкой в 15
photosView.imagesMaxCountWhenWillCompose = 15;
```
* Настройка автоматического изменения размера изображений при повороте экрана (по умолчанию YES)
```objc
// Выключение автоматического изменения размера изображений при повороте экрана
photosView.autoRotateImage = NO;
```## <a id="ожидаем_что"></a>Ожидаемое
Если у вас возникнут вопросы во время использования, пожалуйста, откройте issue! Я с удовольствием помогу вам ответить на любые связанные вопросы!
Вместо того чтобы ставить мне звезды, бросьте мне как можно больше баг-репортов!
Если вы хотите принять участие в поддержке этого проекта, вы можете отправить pull request!
Если вам нужны дополнительные API для кастомизации или вы хотите дать совет/предложение, пожалуйста, откройте issue! Я предоставлю дополнительные API в соответствии с вашими требованиями!
Если вы используете эту стороннюю библиотеку в запущенном приложении, пожалуйста, откройте issue! Это поможет мне своевременно собирать данные и обновлять информацию!```markdown
- Если у вас возникнут вопросы во время использования, пожалуйста, создайте issue! Я с удовольствием помогу вам ответить на любые связанные вопросы!
- Вместо того чтобы ставить мне звезды, отправьте мне как можно больше bug-reports!
- Если вы хотите принять участие в поддержке этого проекта, вы можете отправить pull request!
- Если вам нужны дополнительные API для кастомизации или вы хотите дать совет/предложение, пожалуйста, создайте issue! Я предоставлю дополнительные API в соответствии с вашими требованиями!
- Если вы используете эту стороннюю библиотеку в запущенном приложении, пожалуйста, создайте issue! Это поможет мне своевременно собирать данные и обновлять информацию!
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )