анимация похожа на открытие приложения в ios7

Я хочу создать анимацию, похожую на приложение, открытую в iPhone в iOS7. В этой анимации он просто показывает, что приложение открывается с этой точки и закрывается в той же точке.

Кто-нибудь может мне помочь, пожалуйста!

4 Solutions collect form web for “анимация похожа на открытие приложения в ios7”

@property (weak, nonatomic) IBOutlet UIImageView *bg; @property (weak, nonatomic) IBOutlet UIImageView *cal; … bool nowZoomed = NO; CGRect iconPosition = {16,113,60,60}; // customize icon position - (CGRect)zoomedRect // just a helper function, to get the new background screen size { float screenWidth = UIScreen.mainScreen.bounds.size.width; float screenHeight = UIScreen.mainScreen.bounds.size.height; float size = screenWidth / iconPosition.size.width; float x = screenWidth/2 - (CGRectGetMidX(iconPosition) * size); float y = screenHeight/2 - (CGRectGetMidY(iconPosition) * size); return CGRectMake(x, y, screenWidth * size, screenHeight * size); } - (IBAction)test { float animationDuration = 0.3f; //default if (nowZoomed) // zoom OUT { [UIView animateWithDuration:animationDuration animations:^{ // animate to original frame _cal.frame = iconPosition; _bg.frame = UIScreen.mainScreen.bounds; } completion:^(BOOL finished) { [UIView animateWithDuration:animationDuration/2.0f animations:^{ // then fade out _cal.alpha = 0.0f; } completion:^(BOOL finished) { _cal.hidden = YES; }]; }]; } else // zoom IN { _cal.alpha = 0.0f; _cal.hidden = NO; [UIView animateWithDuration:animationDuration/2.0f animations:^{ // fade in faster _cal.alpha = 1.0f; }]; [UIView animateWithDuration:animationDuration animations:^{ // while expanding view _cal.frame = UIScreen.mainScreen.bounds; _bg.frame = [self zoomedRect]; }]; } nowZoomed = !nowZoomed; } 

вы можете проверить его, создав образец проекта следующим образом:

  • сделайте два скриншота из симулятора, как я сделал (рабочий стол и календарь), или возьмите эти два экрана: рабочий стол / календарь
  • добавьте 2 изображения и 1 кнопку в раскадровку
  • сделать представление фонового изображения большим, чем весь экран
  • и другое изображение с {16,113,60,60} размерами: {16,113,60,60}
  • создайте IBOutlet для обоих (самые первые две строки кода)
  • установить цель действия кнопки на -(void)test

раскадровкаанимация снимок раскадровки (слева) и переход анимации (справа)

В этом случае я предпочитаю использовать CGAffineTransformMakeScale() и настройку -[CALayer affineTransform] .

affineTransform очень прост в использовании и имеет несколько приятных, неявных преимуществ Core Animation. Примерами являются то, что делает вещи, такие как обращение с изменением происхождения фрейма для вас неявным образом и делает его действительно легким для возврата к первоначальному размеру, если это необходимо – вы никогда не потеряли его в первую очередь!

 [UIView animateWithDuration:0.3 animations:^{ view.layer.affineTransform = CGAffineTransformMakeScale(10.0, 10.0); // To make a view larger: otherView.layer.affineTransform = CGAffineTransformMakeScale(0.0, 0.0); // to make a view smaller }]; 

а также

 // To reset views back to their initial size after changing their sizes: [UIView animateWithDuration:0.3 animations:^{ view.layer.affineTransform = CGAffineTransformIdentity; otherView.layer.affineTransform = CGAffineTransformIdentity; }]; 

Насколько мне известно, эта анимация создается с использованием скриншотов. Он обновляет фрейм представления и одновременно обеспечивает плавный переход от логотипа приложения к скриншоту из приложения. Я подражал открытию приложения iPod (музыки) в нижнем правом углу устройства до размера экрана:

 UIView * v = [[UIView alloc]init]; CGSize size = self.view.bounds.size; CGRect frameInitial = CGRectMake(size.width - 30, size.height - 30, 20, 20); CGRect frameFinal = CGRectMake(0,0, size.width, size.height); [v setFrame:frameInitial]; 

Затем используйте строки ниже, если вы хотите анимировать размер кадра:

 [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{ [v setFrame:frameFinal]; } completion:nil]; 

Изменить: не понимал, что масштабирование также включает фон. Код ниже не проверен (я не работаю), поэтому ожидайте некоторые дефекты и опечатки.

Представьте, что у вас есть два слоя на представлении контроллера. Непосредственно на vc есть приложение, которое вы хотите открыть, и назовите его finalView. На верхнем слое есть окно со всеми приложениями, которое будет масштабироваться и исчезать в вашем приложении, что является за ним. Позволяет называть его firstView.

Первоначальный cond: firstView имеет фрейм 320 x 480 (это окно со всеми значками приложения). У него есть альфа 1. finalView имеет один и тот же фрейм и альфу, но он стоит за firstView. Final cond: finalView все равно будет иметь один и тот же фрейм и альфу. Но firstView будет увеличиваться в нижнем правом углу (будет иметь огромный кадр) и исчезать (альфа -> 0).

// Исходный cond: (Или еще лучше использовать IB)

 CGRect frameInitial = CGRectMake(0,0, self.view.size.width, self.view.size; CGRect frameFinal = CGRectMake(self.view.size.width * -4 ,self.view.size.height * -5, self.view.size.width * -5,self.view.size.width * -6); [v setFrame:frameInitial]; 

Затем используйте строки ниже, если вы хотите анимировать размер кадра:

 [UIView animateWithDuration:0.3f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{ [v setFrame:frameFinal]; } completion:nil]; 

У меня небольшое репо, которое использует UICollectionViewFloatLayout для создания эффекта масштабирования, https://github.com/MichaelQuan/ios7ZoomEffect . Это все еще продолжается, но основная идея

Код макета:

 @interface ExpandingCollectionViewLayout () @property (nonatomic, assign) CGRect selectedCellFrame; @property (nonatomic, strong) NSIndexPath *selectedIndexPath; @end - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { NSArray *layoutAttributes = [super layoutAttributesForElementsInRect:rect]; [layoutAttributes enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes *obj, NSUInteger idx, BOOL *stop) { [self _transformLayoutAttributes:obj]; }]; return layoutAttributes; } - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewLayoutAttributes *layoutAttributes = [super layoutAttributesForItemAtIndexPath:indexPath]; [self _transformLayoutAttributes:layoutAttributes]; return layoutAttributes; } - (void)_transformLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { if (self.selectedIndexPath != nil) { if ([layoutAttributes.indexPath isEqual:self.selectedIndexPath]) { // set the frame to be the bounds of the collectionView to expand to the entire collectionView layoutAttributes.frame = self.collectionView.bounds; } else { //scale = collectionView.size / cell_selected.size //translate = (scale - 1)(cell_i.center - cell_selected.center) + (collectionView.center - cell_selected.center) CGRect collectionViewBounds = self.collectionView.bounds; CGRect selectedFrame = self.selectedCellFrame; CGRect notSelectedFrame = layoutAttributes.frame; // Calculate the scale transform based on the ratio between the selected cell's frame and the collection views bound // Scale on that because we want everything to look scaled by the same amount, and the scale is dependent on how much the selected cell has to expand CGFloat x_scale = collectionViewBounds.size.width / selectedFrame.size.width; CGFloat y_scale = collectionViewBounds.size.height / selectedFrame.size.height; CGAffineTransform scaleTransform = CGAffineTransformMakeScale(x_scale, y_scale); // Translation based on how much the selected cell has been scaled // translate based on the (scale - 1) and delta between the centers CGFloat x_zoomTranslate = (x_scale - 1) * (CGRectGetMidX(notSelectedFrame) - CGRectGetMidX(selectedFrame)); CGFloat y_zoomTranslate = (y_scale - 1) * (CGRectGetMidY(notSelectedFrame) - CGRectGetMidY(selectedFrame)); CGAffineTransform zoomTranslate = CGAffineTransformMakeTranslation(x_zoomTranslate, y_zoomTranslate); //Translation based on how much the cells are scaled // Translation based on where the selected cells center is // since we move the center of the selected cell when expanded to full screen, all other cells must move by that amount as well CGFloat x_offsetTranslate = CGRectGetMidX(collectionViewBounds) - CGRectGetMidX(selectedFrame); CGFloat y_offsetTranslate = CGRectGetMidY(collectionViewBounds) - CGRectGetMidY(selectedFrame); CGAffineTransform offsetTranslate = CGAffineTransformMakeTranslation(x_offsetTranslate, y_offsetTranslate); // multiply translations first CGAffineTransform transform = CGAffineTransformConcat(zoomTranslate, offsetTranslate); transform = CGAffineTransformConcat(scaleTransform, transform); layoutAttributes.transform = transform; } } } 

Чтобы развернуть ячейку, используя этот код макета, установите как selectedCellFrame и selectedIndexPath в ячейку, которую вы хотите развернуть, и вызовите performBatchUpdates:completion: в виде коллекции. Чтобы свернуть set selectedCellFrame = CGRectNull и selectedIndexPath = nil и вызвать performBatchUpdates:completion:

  • Метод windowScriptObject не найден в коде Objective-C
  • Использование основного графика для iPhone, дата вывода по оси x
  • Как получить статус bluetooth (ON / OFF) в программном обеспечении iphone
  • Последующие NSURLConnections не запускают методы делегата
  • Установка альфа на UIView устанавливает альфу на ее подпунктах, которая не должна произойти
  • Каковы преимущества и недостатки использования ARC?
  • Как добавить дополнительные plists в xCode в Settings.bundle для использования с библиотекой iPhone InAppSettingsKit?
  • UIImagePickerController позволяет не работать
  • Не получать push-уведомления в iPhone
  • В iOS можно ли добавить шрифт в приложение во время выполнения?
  • NSSortDescriptor и NSPredicate для сортировки и фильтрации
  • Interesting Posts

    Как отправить push-уведомление после нажатия кнопки?

    Кнопка удаления iOS – Цель C

    NSURLCache кэширует случайные ответы, которые нельзя кэшировать

    Предотвратите получение UITableView двумя касаниями (вложенная поп-анимация может привести к повреждению панели навигации)

    Случайное локальное уведомление в фоновом режиме

    Ошибка установки Pod: Невозможно добавить источник с url `https: // github.com / CocoaPods / Specs.git` named master

    iOS 8 UITableViewRowAction: Проведите по экрану влево, изображения?

    zxing в xcode 4.5 и ios 6

    Сброс UIView

    AVCaptureMovieFileOutput записывает аудио только для первого видео

    Форматирование текста для текста аккорда и песни Textview или UiLabel Swift

    Индикатор активности спина после задержки во время длительных операций

    как я могу получить cgcolor из значений RGB?

    Добавление Google_analytics для iOS не работает много раз?

    Ошибка геолокации телефонной почты: тайм-аут

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.