赞
踩
self.hbd_titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 19)~]
self.hbd_barStyle = .black
self.hbd_barShadowHidden = true
截图拼图大师用了
拼图大师用了
WRNoticeAgreementView *view = [[WRNoticeAgreementView alloc] init];
zhPopupController *popController = [[zhPopupController alloc] initWithView:view size:CGSizeMake(kAdaptedFloat(300), kAdaptedFloat(360))];
popController.presentationStyle = zhPopupSlideStyleFade;
popController.dismissOnMaskTouched = NO;
[popController show];
view.hideViewBlock = ^{
[popController dismiss];
};
popController.maskAlpha = 0;
popController.presentationStyle = zhPopupSlideStyleFromBottom;
popController.layoutType = zhPopupLayoutTypeBottom;
popController.keyboardChangeFollowed = YES;
#import <zhPopupController/zhPopupController.h> let view = DaoChuNormalView.init(frame: CGRect.zero) let popController = zhPopupController.init(view: view, size: CGSize.init(width: kScreenWidth, height: 142~)) popController.presentationStyle = .fromBottom popController.layoutType = .bottom popController.show() view.selectClickClosure = { indexRow in if indexRow == 0 { } else { } popController.dismiss() }
#import <SVGAPlayer/SVGA.h> @property (nonatomic, strong) SVGAPlayer *svgaPlayer; - (SVGAPlayer *)svgaPlayer { if (!_svgaPlayer) { _svgaPlayer = [[SVGAPlayer alloc] init]; _svgaPlayer.loops = 0; _svgaPlayer.delegate = self; _svgaPlayer.hidden = YES; } return _svgaPlayer; } #pragma mark ------- SVGAPlayerDelegate ------- - (void)playSVGA { //先停止动画 [self.svgaPlayer stopAnimation]; SVGAParser *parser = [[SVGAParser alloc] init]; [parser parseWithNamed:@"voicesign_playvoice" inBundle:[NSBundle mainBundle] completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) { if (videoItem != nil) { self.svgaPlayer.videoItem = videoItem; [self.svgaPlayer startAnimation]; } } failureBlock:^(NSError * _Nonnull error) { DEBUGLOG(@"%@", error.description); }]; } // 动画结束触发 - (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player { self.player.hidden = YES; }
###普通
@property (nonatomic, strong) UIView *containerView;
@property (nonatomic, strong) ZFPlayerController *player;
@property (nonatomic, strong) ZFCustomControlView *controlView;
- (UIView *)containerView { if (!_containerView) { _containerView = [[UIView alloc] init]; } return _containerView; } - (ZFPlayerController *)player { if (!_player) { ZFAVPlayerManager *playerManager = [[ZFAVPlayerManager alloc] init]; playerManager.scalingMode = ZFPlayerScalingModeNone; _player = [ZFPlayerController playerWithPlayerManager:playerManager containerView:self.containerView]; _player.controlView = self.controlView; /// 设置退到后台继续播放 _player.pauseWhenAppResignActive = NO; WEAKSELF /// 播放完成 _player.playerDidToEnd = ^(id _Nonnull asset) { [weakSelf.player.currentPlayerManager replay]; }; } return _player; } - (ZFCustomControlView *)controlView { if (!_controlView) { _controlView = [ZFCustomControlView new]; } return _controlView; }
###仿微信朋友圈视频播放
@property (nonatomic, strong) ZFPlayerController *player; @property (nonatomic, strong) ZFWeChatControlView *controlView; - (ZFPlayerController *)player { if (!_player) { ZFAVPlayerManager *playerManager = [[ZFAVPlayerManager alloc] init]; playerManager.scalingMode = ZFPlayerScalingModeAspectFill; /// player的tag值必须在cell里设置 _player = [ZFPlayerController playerWithScrollView:self.tableView playerManager:playerManager containerViewTag:kZFPlayerViewTag]; _player.controlView = self.controlView; /// 0.4是消失40%时候 _player.playerDisapperaPercent = 0.4; /// 0.6是出现60%时候 _player.playerApperaPercent = 0.6; /// 移动网络依然自动播放 _player.WWANAutoPlay = YES; /// 续播 _player.resumePlayRecord = YES; /// 禁止掉滑动手势 _player.disableGestureTypes = ZFPlayerDisableGestureTypesPan; /// 竖屏的全屏 _player.orientationObserver.fullScreenMode = ZFFullScreenModePortrait; /// 隐藏全屏的状态栏 _player.orientationObserver.fullScreenStatusBarHidden = YES; _player.orientationObserver.fullScreenStatusBarAnimation = UIStatusBarAnimationNone; /// 全屏的填充模式(全屏填充、按视频大小填充) _player.orientationObserver.portraitFullScreenMode = ZFPortraitFullScreenModeScaleAspectFit; /// 禁用竖屏全屏的手势(点击、拖动手势) _player.orientationObserver.disablePortraitGestureTypes = ZFDisablePortraitGestureTypesNone; } return _player; } - (ZFWeChatControlView *)controlView { if (!_controlView) { _controlView = [ZFWeChatControlView new]; } return _controlView; }
@protocol ZFTableViewCellDelegate <NSObject> - (void)zf_playTheVideoAtIndexPath:(NSIndexPath *)indexPath; @end - (void)setDelegate:(id<ZFTableViewCellDelegate>)delegate withIndexPath:(NSIndexPath *)indexPath; - (void)setDelegate:(id<ZFTableViewCellDelegate>)delegate withIndexPath:(NSIndexPath *)indexPath { self.delegate = delegate; self.indexPath = indexPath; } #pragma mark ------- ZFTableViewCellDelegate ------- - (void)zf_playTheVideoAtIndexPath:(NSIndexPath *)indexPath { [self playTheVideoAtIndexPath:indexPath scrollAnimated:NO]; [self.player enterPortraitFullScreen:YES animated:YES]; } /// play the video - (void)playTheVideoAtIndexPath:(NSIndexPath *)indexPath scrollAnimated:(BOOL)animated { QXDynamicListModel *model = self.tableData[indexPath.row]; if (animated) { [self.player playTheIndexPath:indexPath assetURL:[NSURL URLWithString:model.href] scrollPosition:ZFPlayerScrollViewScrollPositionCenteredVertically animated:YES]; } else { [self.player playTheIndexPath:indexPath assetURL:[NSURL URLWithString:model.href]]; } [self.controlView showCoverViewWithUrl:model.video_thumb]; CGSize videoSize = kAdaptedSize(220, 220); self.player.currentPlayerManager.presentationSize = videoSize; }
#import <JXCategoryView.h> #pragma mark ------- JXCategoryListContentViewDelegate ------- - (UIView *)listView { return self.view; } @property (nonatomic, strong) JXCategoryTitleView *categoryView; // 分页 @property (nonatomic, strong) JXCategoryIndicatorLineView *indicator; @property (nonatomic, strong) JXCategoryListContainerView *listContainerView; @property (nonatomic, strong) JXCategoryIndicatorBackgroundView *backgroundView; // 背景 - (JXCategoryTitleView *)jk_categoryView { if (!_jk_categoryView) { _jk_categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; _jk_categoryView.titles = @[@"直播", @"关注", @"视频", @"附近"]; _jk_categoryView.averageCellSpacingEnabled = NO; _jk_categoryView.titleLabelVerticalOffset = kAdaptedFloat(5); _jk_categoryView.cellSpacing = kAdaptedFloat(35); _jk_categoryView.cellWidth = kAdaptedFloat(20); _jk_categoryView.titleColor = k_Color_TipColor; _jk_categoryView.titleSelectedColor = [UIColor blackColor]; _jk_categoryView.titleFont = kAdaptedFontSize(16); _jk_categoryView.titleSelectedFont = kAdaptedFontSize(22); _jk_categoryView.contentEdgeInsetLeft = kAdaptedFloat(25); _jk_categoryView.indicators = @[self.indicator]; } return _jk_categoryView; } - (JXCategoryIndicatorLineView *)indicator { if (!_indicator) { _indicator = [[JXCategoryIndicatorLineView alloc] init]; _indicator.indicatorColor = k_Color_themeColor; _indicator.indicatorWidth = kAdaptedFloat(21); _indicator.verticalMargin = kAdaptedFloat(5); } return _indicator; } - (JXCategoryListContainerView *)jk_listContainerView { if (!_jk_listContainerView) { _jk_listContainerView = [[JXCategoryListContainerView alloc] initWithType:JXCategoryListContainerType_ScrollView delegate:self]; self.jk_categoryView.listContainer = _jk_listContainerView; } return _jk_listContainerView; } - (JXCategoryIndicatorBackgroundView *)backgroundView { if (!_backgroundView) { _backgroundView = [[JXCategoryIndicatorBackgroundView alloc] init]; _backgroundView.indicatorColor = [UIColor clearColor]; _backgroundView.indicatorHeight = kAdaptedFloat(24); _backgroundView.indicatorCornerRadius = kAdaptedFloat(24) / 2; _backgroundView.borderColor = [UIColor blackColor]; _backgroundView.borderWidth = 1; } return _backgroundView; } #pragma mark ------- JXCategoryListContainerViewDelegate ------- //返回列表的数量 - (NSInteger)numberOfListsInlistContainerView:(JXCategoryListContainerView *)listContainerView { return self.categoryView.titles.count; } //根据下标index返回对应遵从`JXCategoryListContentViewDelegate`协议的列表实例 - (id<JXCategoryListContentViewDelegate>)listContainerView:(JXCategoryListContainerView *)listContainerView initListForIndex:(NSInteger)index { switch (index) { case 0: { QXLiveViewController *vc = [[QXLiveViewController alloc] init]; vc.interFace = Home_GetHot; return vc; } break; default: { QXLiveViewController *vc = [[QXLiveViewController alloc] init]; vc.interFace = Home_GetNearby; return vc; } break; } }
pod 'BRPickerView'
`
`
// 地址选择 BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc]init]; addressPickerView.pickerMode = BRAddressPickerModeArea; addressPickerView.title = @"请选择地区"; addressPickerView.selectValues = [self.getCompleteInfoModel.location componentsSeparatedByString:@"-"]; WeakSelf(weakSelf); addressPickerView.resultBlock = ^(BRProvinceModel * _Nullable province, BRCityModel * _Nullable city, BRAreaModel * _Nullable area) { NSString *locetionString = [NSString stringWithFormat:@"%@-%@-%@", province.name, city.name, area.name]; DEBUGLOG(@"%@", locetionString); [weakSelf User_UpdateFieldsApiWithDict:@{@"location" : locetionString}]; }; [addressPickerView show]; // 日期选择 BRDatePickerView *datePickerView = [[BRDatePickerView alloc] init]; datePickerView.pickerMode = BRDatePickerModeYMD; datePickerView.title = @"选择年月日"; datePickerView.selectValue = self.getCompleteInfoModel.birthday; // datePickerView.selectDate = [NSDate br_setYear:1990 month:10 day:1]; datePickerView.minDate = [NSDate br_setYear:1900 month:3 day:12]; datePickerView.maxDate = [NSDate date]; WeakSelf(weakSelf); datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) { DEBUGLOG(@"选择的值:%@", selectValue); [weakSelf User_UpdateFieldsApiWithDict:@{@"birthday" : selectValue}]; }; [datePickerView show]; /// 1.单列字符串选择器(传字符串数组) BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]init]; stringPickerView.pickerMode = BRStringPickerComponentSingle; stringPickerView.title = @"学历"; stringPickerView.dataSourceArr = @[@"大专以下", @"大专", @"本科", @"硕士", @"博士", @"博士后"]; stringPickerView.selectIndex = 2; stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) { NSLog(@"选择的值:%@", resultModel.value); }; [stringPickerView show];
#YYModel
//Model 属性名和 JSON 中的 Key 不相同,需实现的方法 + (NSDictionary<NSString *,id> *)modelCustomPropertyMapper { return @{@"cover_url_large" : @[@"cover_url_large",@"coverUrlLarge"], }; } //容器类属性,需实现的方法 + (NSDictionary *)modelContainerPropertyGenericClass { return @{@"list" : [GHDeviceInfo class] }; } // 模型转字典 NSDictionary *dict = [model yy_modelToJSONObject]; NSMutableArray *temp = [[NSMutableArray alloc] init]; for (NSDictionary *helpDict in array) { [temp addObject:[SJUseForHelp yy_modelWithJSON:helpDict]]; }
#CWLateralSlide 侧滑抽屉框架
#import "UIViewController+CWLateralSlide.h" // 注册手势驱动 WEAKSELF // 第一个参数为是否开启边缘手势,开启则默认从边缘50距离内有效,第二个block为手势过程中我们希望做的操作 [self cw_registerShowIntractiveWithEdgeGesture:YES transitionDirectionAutoBlock:^(CWDrawerTransitionDirection direction) { //NSLog(@"direction = %ld", direction); if (direction == CWDrawerTransitionFromLeft) { // 左侧滑出 [weakSelf myClickMethod]; } }]; // 我的 - (void)myClickMethod { FTMyListTuController *vc = [[FTMyListTuController alloc] init]; [self cw_showDefaultDrawerViewController:vc]; }
make.centerY.equalTo(self.mas_centerY).multipliedBy(0.8);
//宽大于等于200
make.width.greaterThanOrEqualTo(@200);
//宽小于等于200
make.width.lessThanOrEqualTo(@400)
make.edges.equalTo(view.superview).insets(UIEdgeInsetsMake(20, 20, 20, 20));
[self.normalImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.top.equalTo(self.view.mas_top).offset(kAdaptedFloat(20));
make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).offset(-kAdaptedFloat(160));
make.width.mas_equalTo(self.normalImageView.mas_height).multipliedBy(imageWidth / imageHeight);
}];
#pragma mark ------- 键盘处理 -------
IQKeyboardManager *manager = [IQKeyboardManager sharedManager];
manager.enable = YES;
manager.shouldResignOnTouchOutside = YES;
manager.shouldToolbarUsesTextFieldTintColor = YES;
manager.enableAutoToolbar = NO;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。