完成小窗切换,屏幕分享显示
This commit is contained in:
parent
245b8f69a7
commit
04303650e0
@ -45,6 +45,7 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
@property (weak, nonatomic) IBOutlet UIButton *subVisibleButton;
|
@property (weak, nonatomic) IBOutlet UIButton *subVisibleButton;
|
||||||
@property (weak, nonatomic) IBOutlet UIButton *viewRotateButton;
|
@property (weak, nonatomic) IBOutlet UIButton *viewRotateButton;
|
||||||
@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *remoteViewArr;
|
@property (strong, nonatomic) IBOutletCollection(UIView) NSArray *remoteViewArr;
|
||||||
|
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *subViewBtnArr;
|
||||||
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *displayLabelArr;
|
@property (strong, nonatomic) IBOutletCollection(UILabel) NSArray *displayLabelArr;
|
||||||
@property (weak, nonatomic) IBOutlet UILabel *displayLabel;
|
@property (weak, nonatomic) IBOutlet UILabel *displayLabel;
|
||||||
|
|
||||||
@ -54,10 +55,12 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
@property (strong, nonatomic) NSString* userSig;
|
@property (strong, nonatomic) NSString* userSig;
|
||||||
@property (strong, nonatomic) TRTCCloud *trtcCloud;
|
@property (strong, nonatomic) TRTCCloud *trtcCloud;
|
||||||
@property (strong, nonatomic) NSMutableOrderedSet *remoteUidSet;
|
@property (strong, nonatomic) NSMutableOrderedSet *remoteUidSet;
|
||||||
@property (strong, nonatomic) NSMutableOrderedSet<TrtcUserInfo*> *viewUserSet;
|
@property (strong, nonatomic) NSMutableArray<TrtcUserInfo*> *viewUsers;
|
||||||
@property (strong, nonatomic) TrtcUserInfo *sharedUser;
|
|
||||||
|
|
||||||
@property (assign, nonatomic) BOOL isFrontCamera;
|
@property (assign, nonatomic) BOOL isFrontCamera;
|
||||||
|
@property (assign, nonatomic) BOOL *hasShareUser;
|
||||||
|
@property (assign, nonatomic) BOOL *hiddenAllSubView;
|
||||||
|
|
||||||
@property (assign, nonatomic) NSInteger rotation;
|
@property (assign, nonatomic) NSInteger rotation;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@ -75,18 +78,18 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
return _trtcCloud;
|
return _trtcCloud;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSMutableOrderedSet *)remoteUidSet {
|
- (NSMutableOrderedSet<TrtcUserInfo*> *)remoteUidSet {
|
||||||
if (!_remoteUidSet) {
|
if (!_remoteUidSet) {
|
||||||
_remoteUidSet = [[NSMutableOrderedSet alloc] initWithCapacity:maxRemoteUserNum];
|
_remoteUidSet = [[NSMutableOrderedSet alloc] initWithCapacity:maxRemoteUserNum];
|
||||||
}
|
}
|
||||||
return _remoteUidSet;
|
return _remoteUidSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSMutableOrderedSet *)viewUserSet {
|
- (NSMutableArray<TrtcUserInfo*> *)viewUsers {
|
||||||
if (!_viewUserSet) {
|
if (!_viewUsers) {
|
||||||
_viewUserSet = [[NSMutableOrderedSet alloc] initWithCapacity:maxRemoteUserNum];
|
_viewUsers = [[NSMutableArray alloc] initWithCapacity:maxRemoteUserNum];
|
||||||
}
|
}
|
||||||
return _viewUserSet;
|
return _viewUsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithRoomId:(UInt32)roomId userId:(NSString *)userId appId:(UInt32)appId userSig:(NSString *)userSig{
|
- (instancetype)initWithRoomId:(UInt32)roomId userId:(NSString *)userId appId:(UInt32)appId userSig:(NSString *)userSig{
|
||||||
@ -108,7 +111,7 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
TrtcUserInfo *user = [[TrtcUserInfo alloc]initWithPersonid:extra[@"userId"]];
|
TrtcUserInfo *user = [[TrtcUserInfo alloc]initWithPersonid:extra[@"userId"]];
|
||||||
NSInteger index = [[self remoteUidSet] indexOfObject: user];
|
NSInteger index = [[self remoteUidSet] indexOfObject: user];
|
||||||
NSLog(@"TRTC - userinfo.update -- userId:%@,index:%ld",extra[@"userId"],index);
|
NSLog(@"TRTC - userinfo.update -- userId:%@,index:%ld",extra[@"userId"],index);
|
||||||
if (index != NSNotFound) { return; }
|
if (index == NSNotFound) { return; }
|
||||||
TrtcUserInfo *obj = [self remoteUidSet][index];
|
TrtcUserInfo *obj = [self remoteUidSet][index];
|
||||||
[obj setDisplayName: extra[@"displayName"]];
|
[obj setDisplayName: extra[@"displayName"]];
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
@ -129,6 +132,7 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)setupDefaultUIConfig {
|
- (void)setupDefaultUIConfig {
|
||||||
|
NSLog(@"TRTC - setupDefaultUIConfig:::::");
|
||||||
_displayLabel.text = @"我";
|
_displayLabel.text = @"我";
|
||||||
_displayLabel.hidden = NO;
|
_displayLabel.hidden = NO;
|
||||||
_rotation = 0;
|
_rotation = 0;
|
||||||
@ -164,23 +168,47 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
[TRTCCloud destroySharedIntance];
|
[TRTCCloud destroySharedIntance];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)changeUser:(NSInteger) a and:(NSInteger) b{
|
||||||
|
if(a == b || a < 0 || b < 0){return;}
|
||||||
|
NSInteger x = a > b ? b : a;
|
||||||
|
NSInteger y = a > b ? a : b;
|
||||||
|
if([self remoteUidSet].count > y && x>-1){
|
||||||
|
// 交换
|
||||||
|
NSLog(@"TRTC - onSubViewClcik:::::Before change:%@,%@",[[self remoteUidSet][x] personid],[[self remoteUidSet][y] personid]);
|
||||||
|
TrtcUserInfo* info = [self remoteUidSet][x];
|
||||||
|
TrtcUserInfo* info2 = [self remoteUidSet][y];
|
||||||
|
[_remoteUidSet removeObjectAtIndex:x];
|
||||||
|
[_remoteUidSet setObject:info atIndex: y-1];
|
||||||
|
[_remoteUidSet insertObject:info2 atIndex:x];
|
||||||
|
NSLog(@"TRTC - onSubViewClcik:::::after change:%@,%@",[[self remoteUidSet][x] personid],[[self remoteUidSet][y] personid]);
|
||||||
|
[self refreshRemoteVideoViews];
|
||||||
|
NSDictionary *event = [[NSDictionary alloc]initWithObjectsAndKeys:
|
||||||
|
[[NSString alloc] initWithFormat:@"%d",_roomId],@"room",info2.personid,@"userId", nil];
|
||||||
|
[CordovaEventKit fireEvent:@"onLayoutChangeMessage" obj:event];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - IBActions
|
#pragma mark - IBActions
|
||||||
|
|
||||||
- (IBAction)onSubVisibleChange:(UIButton*)sender {
|
- (IBAction)onSubVisibleChange:(UIButton*)sender {
|
||||||
NSLog(@"TRTC - onSubVisibleChange:::::");
|
NSLog(@"TRTC - onSubVisibleChange:::::,before:%@",[NSNumber numberWithBool:sender.selected]);
|
||||||
sender.selected = !sender.selected;
|
sender.selected = !sender.selected;
|
||||||
|
NSLog(@"TRTC - onSubVisibleChange:::::,after:%@",[NSNumber numberWithBool:sender.selected]);
|
||||||
[self refreshRemoteVideoViews];
|
[self refreshRemoteVideoViews];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)onVideoRotate:(UIButton*)sender {
|
- (IBAction)onVideoRotate:(UIButton*)sender {
|
||||||
NSLog(@"TRTC - onRouteChange:::::");
|
NSLog(@"TRTC - onRouteChange:::::,%@,local index: %ld",[[self remoteUidSet][0] personid],[_viewUsers indexOfObject:_userId]);
|
||||||
TRTCRenderParams *params = [[TRTCRenderParams alloc] init];
|
TRTCRenderParams *params = [[TRTCRenderParams alloc] init];
|
||||||
|
|
||||||
params.fillMode = TRTCVideoFillMode_Fit;
|
params.fillMode = TRTCVideoFillMode_Fit;
|
||||||
_rotation += 90;
|
_rotation += 1;
|
||||||
_rotation = _rotation > 270 ? 0 : _rotation;
|
_rotation = _rotation > 3 ? 0 : _rotation;
|
||||||
params.rotation = _rotation;
|
params.rotation = _rotation;
|
||||||
|
// [_trtcCloud stopRemoteView:[[self viewUsers][0] personid] streamType:TRTCVideoStreamTypeBig];
|
||||||
[_trtcCloud setRemoteRenderParams:[[self remoteUidSet][0] personid] streamType:TRTCVideoStreamTypeBig params:params];
|
[_trtcCloud setRemoteRenderParams:[[self remoteUidSet][0] personid] streamType:TRTCVideoStreamTypeBig params:params];
|
||||||
|
// [_trtcCloud updateRemoteView:self.view streamType:TRTCVideoStreamTypeBig forUser:[[self remoteUidSet][0] personid]];
|
||||||
|
// [_trtcCloud startRemoteView:[[self viewUsers][0] personid] streamType: TRTCVideoStreamTypeBig view:self.view];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,6 +246,15 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (IBAction)onSubViewClcik:(UIButton*)sender {
|
||||||
|
NSLog(@"TRTC - onSubViewClcik:::::button");
|
||||||
|
NSInteger index = [_subViewBtnArr indexOfObject:sender];
|
||||||
|
if (index == NSNotFound) {return;}
|
||||||
|
index = index + 1;
|
||||||
|
[self changeUser:0 and:index];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#pragma mark - TRTCCloud Delegate
|
#pragma mark - TRTCCloud Delegate
|
||||||
|
|
||||||
- (void)onEnterRoom:(NSInteger) result{
|
- (void)onEnterRoom:(NSInteger) result{
|
||||||
@ -237,8 +274,6 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
[[NSString alloc] initWithFormat:@"%d",_roomId],@"room",_userId,@"userId", nil];
|
[[NSString alloc] initWithFormat:@"%d",_roomId],@"room",_userId,@"userId", nil];
|
||||||
|
|
||||||
[CordovaEventKit fireEvent:@"onLayoutChangeMessage" obj:event];
|
[CordovaEventKit fireEvent:@"onLayoutChangeMessage" obj:event];
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {
|
- (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available {
|
||||||
@ -249,65 +284,68 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
if (available) {
|
if (available) {
|
||||||
if (index != NSNotFound) { return; }
|
if (index != NSNotFound) { return; }
|
||||||
if([info isShareUser]){
|
if([info isShareUser]){
|
||||||
_sharedUser = info;
|
_hasShareUser = YES;
|
||||||
[[self remoteUidSet] setObject:info atIndex:0];
|
|
||||||
[_trtcCloud stopLocalPreview];
|
|
||||||
} else{
|
|
||||||
[[self remoteUidSet] addObject:info];
|
|
||||||
}
|
}
|
||||||
|
[[self remoteUidSet] addObject:info];
|
||||||
} else {
|
} else {
|
||||||
if (index != NSNotFound) { return; }
|
if (index == NSNotFound) { return; }
|
||||||
if([info isShareUser]){
|
if([info isShareUser]){
|
||||||
_sharedUser = nil;
|
_hasShareUser = NO;
|
||||||
[_trtcCloud stopLocalPreview];
|
_hiddenAllSubView = NO;
|
||||||
}
|
}
|
||||||
[_trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeSmall];
|
[_trtcCloud stopRemoteView:userId streamType:TRTCVideoStreamTypeSmall];
|
||||||
[[self remoteUidSet] removeObject:userId];
|
[[self remoteUidSet] removeObject:userId];
|
||||||
}
|
}
|
||||||
[self refreshRemoteVideoViews];
|
[self refreshRemoteVideoViews];
|
||||||
NSDictionary *event = [[NSDictionary alloc]initWithObjectsAndKeys:
|
if(_hasShareUser){
|
||||||
[[NSString alloc] initWithFormat:@"%d",_roomId],@"room",userId,@"userId",available,@"available", nil];
|
// 切换分享屏幕到主窗口
|
||||||
|
[self changeUser:0 and:[[self remoteUidSet] indexOfObject:info]];
|
||||||
|
// 隐藏所有子窗口
|
||||||
|
_hiddenAllSubView = YES;
|
||||||
|
[self refreshRemoteVideoViews];
|
||||||
|
// [_trtcCloud stopLocalPreview];
|
||||||
|
}
|
||||||
|
NSDictionary *event = @{@"room": [[NSString alloc] initWithFormat:@"%d", _roomId], @"userId": userId, @"available": [NSNumber numberWithBool:available]};
|
||||||
[CordovaEventKit fireEvent:@"onUserVideoAvailable" obj:event];
|
[CordovaEventKit fireEvent:@"onUserVideoAvailable" obj:event];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)refreshRemoteVideoViews {
|
- (void)refreshRemoteVideoViews {
|
||||||
NSLog(@"TRTC - refreshRemoteVideoViews");
|
NSLog(@"TRTC - refreshRemoteVideoViews:%ld",_remoteViewArr.count);
|
||||||
// NSInteger index = 0;
|
|
||||||
// for (NSString* userId in [self remoteUidSet]) {0
|
|
||||||
// if (index >= maxRemoteUserNum) { return; }
|
|
||||||
// [_remoteViewArr[index] setHidden:NO];
|
|
||||||
// [_trtcCloud startRemoteView:userId streamType:TRTCVideoStreamTypeSmall
|
|
||||||
// view:_remoteViewArr[index++]];
|
|
||||||
// }
|
|
||||||
|
|
||||||
_subVisibleButton.hidden = _sharedUser != nil;
|
_subVisibleButton.hidden = _hasShareUser != nil;
|
||||||
_viewRotateButton.hidden = _sharedUser == nil;
|
_viewRotateButton.hidden = _hasShareUser == nil;
|
||||||
|
_viewRotateButton.enabled = !_viewRotateButton.hidden;
|
||||||
for (int i = 0; i <= _remoteViewArr.count; i++) {
|
for (int i = 0; i <= _remoteViewArr.count; i++) {
|
||||||
TrtcUserInfo* nUser = [self remoteUidSet].count > i ? [self remoteUidSet][i] : nil;
|
TrtcUserInfo* nUser = [self remoteUidSet].count > i ? [self remoteUidSet][i] : nil;
|
||||||
TrtcUserInfo* oUser = [self viewUserSet].count > i ? [self viewUserSet][i] : nil;
|
TrtcUserInfo* oUser = [self viewUsers].count > i ? [self viewUsers][i] : nil;
|
||||||
UIView* view = i == 0 ? self.view : _remoteViewArr[i-1];
|
UIView* view = i == 0 ? self.view : _remoteViewArr[i-1];
|
||||||
UILabel* label = i ==0 ? _displayLabel : _displayLabelArr[i-1];
|
UILabel* label = i ==0 ? _displayLabel : _displayLabelArr[i-1];
|
||||||
if((_sharedUser != nil || [_subVisibleButton isSelected]) && i!=0){
|
UIButton* btn = i ==0 ? nil : _subViewBtnArr[i-1];
|
||||||
|
NSLog(@"TRTC - refreshRemoteVideoViews - new : %@, o: %@",nUser == nil ? nil : [nUser personid],oUser == nil ? nil : [oUser personid]);
|
||||||
|
if((_hiddenAllSubView || ![_subVisibleButton isSelected]) && i!=0){
|
||||||
[view setHidden:YES];
|
[view setHidden:YES];
|
||||||
[label setHidden:YES];
|
[label setHidden:YES];
|
||||||
}else{
|
}else{
|
||||||
if(nUser != nil){
|
if(nUser != nil){
|
||||||
if([nUser isEqual:oUser]){
|
if([nUser isEqual:oUser] && ![view isHidden]){
|
||||||
if([nUser displayName] == nil || [nUser displayName].length == 0) {
|
if([nUser isLocalUser]){
|
||||||
|
[label setText:@"我"];
|
||||||
|
} else if([nUser displayName] == nil || [nUser displayName].length == 0) {
|
||||||
[label setText:[NSString stringWithFormat:@"%@%@",[nUser personid], [nUser isShareUser] ? @"的屏幕分享" : @""]];
|
[label setText:[NSString stringWithFormat:@"%@%@",[nUser personid], [nUser isShareUser] ? @"的屏幕分享" : @""]];
|
||||||
} else {
|
} else {
|
||||||
[label setText:[NSString stringWithFormat:@"%@%@",[nUser displayName], [nUser isShareUser] ? @"的屏幕分享" : @""]];
|
[label setText:[NSString stringWithFormat:@"%@%@",[nUser displayName], [nUser isShareUser] ? @"的屏幕分享" : @""]];
|
||||||
}
|
}
|
||||||
return;
|
[label sizeToFit];
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
TRTCRenderParams *params = [TRTCRenderParams init];
|
TRTCRenderParams *params = [[TRTCRenderParams alloc] init];
|
||||||
params.rotation = 0;
|
params.rotation = 0;
|
||||||
params.fillMode = [nUser isShareUser] ? TRTCVideoFillMode_Fit : TRTCVideoFillMode_Fill;
|
params.fillMode = [nUser isShareUser] ? TRTCVideoFillMode_Fit : TRTCVideoFillMode_Fill;
|
||||||
if([nUser isLocalUser]){
|
if([nUser isLocalUser]){
|
||||||
[_trtcCloud startLocalPreview:_isFrontCamera view:view];
|
[_trtcCloud startLocalPreview:_isFrontCamera view:view];
|
||||||
[_trtcCloud setLocalRenderParams:params];
|
[_trtcCloud setLocalRenderParams:params];
|
||||||
|
|
||||||
[label setText:@"我"];
|
[label setText:@"我"];
|
||||||
|
[label sizeToFit];
|
||||||
} else {
|
} else {
|
||||||
[_trtcCloud setRemoteRenderParams:[nUser personid] streamType:i == 0 ? TRTCVideoStreamTypeBig : TRTCVideoStreamTypeSmall params:params];
|
[_trtcCloud setRemoteRenderParams:[nUser personid] streamType:i == 0 ? TRTCVideoStreamTypeBig : TRTCVideoStreamTypeSmall params:params];
|
||||||
[_trtcCloud startRemoteView:[nUser personid] streamType:i == 0 ? TRTCVideoStreamTypeBig : TRTCVideoStreamTypeSmall view:view];
|
[_trtcCloud startRemoteView:[nUser personid] streamType:i == 0 ? TRTCVideoStreamTypeBig : TRTCVideoStreamTypeSmall view:view];
|
||||||
@ -317,18 +355,28 @@ static const NSInteger maxRemoteUserNum = 7;
|
|||||||
} else {
|
} else {
|
||||||
[label setText:[NSString stringWithFormat:@"%@%@",[nUser displayName], [nUser isShareUser] ? @"的屏幕分享" : @""]];
|
[label setText:[NSString stringWithFormat:@"%@%@",[nUser displayName], [nUser isShareUser] ? @"的屏幕分享" : @""]];
|
||||||
}
|
}
|
||||||
|
[label sizeToFit];
|
||||||
}
|
}
|
||||||
[label setHidden:NO];
|
[label setHidden:NO];
|
||||||
[view setHidden:NO];
|
[view setHidden:NO];
|
||||||
|
if(btn != nil){
|
||||||
|
[btn setHidden:NO];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
[view setHidden:YES];
|
[view setHidden:YES];
|
||||||
[label setHidden:YES];
|
[label setHidden:YES];
|
||||||
|
if(btn != nil){
|
||||||
|
[btn setHidden:YES];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( [self viewUserSet].count > i ){
|
if(nUser != nil){
|
||||||
[[self viewUserSet] setObject:nUser atIndex:i];
|
[self viewUsers].count > i ? [self viewUsers][i] = nUser : [[self viewUsers] addObject:nUser];
|
||||||
|
}else {
|
||||||
|
while([self viewUsers].count > i){
|
||||||
|
[[self viewUsers] removeObjectAtIndex:i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,12 @@
|
|||||||
<outletCollection property="displayLabelArr" destination="IbE-C4-eSC" id="R4x-VL-wHM"/>
|
<outletCollection property="displayLabelArr" destination="IbE-C4-eSC" id="R4x-VL-wHM"/>
|
||||||
<outletCollection property="displayLabelArr" destination="Sb1-bA-J6q" id="Yal-GN-3Sv"/>
|
<outletCollection property="displayLabelArr" destination="Sb1-bA-J6q" id="Yal-GN-3Sv"/>
|
||||||
<outletCollection property="displayLabelArr" destination="twT-zq-iCy" id="pHx-JS-dcf"/>
|
<outletCollection property="displayLabelArr" destination="twT-zq-iCy" id="pHx-JS-dcf"/>
|
||||||
|
<outletCollection property="subViewBtnArr" destination="g4i-xh-dif" id="SHV-gU-uJN"/>
|
||||||
|
<outletCollection property="subViewBtnArr" destination="xNk-te-p3c" id="X4z-sY-3lH"/>
|
||||||
|
<outletCollection property="subViewBtnArr" destination="bzt-Ez-WZQ" id="ZjO-Jq-BC5"/>
|
||||||
|
<outletCollection property="subViewBtnArr" destination="6Uv-u2-Pqq" id="Zj1-QX-hb4"/>
|
||||||
|
<outletCollection property="subViewBtnArr" destination="Qab-02-i9Q" id="ToR-SP-1Zn"/>
|
||||||
|
<outletCollection property="subViewBtnArr" destination="o25-iM-e3X" id="rUU-2F-rLf"/>
|
||||||
</connections>
|
</connections>
|
||||||
</placeholder>
|
</placeholder>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
@ -44,8 +50,20 @@
|
|||||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="g4i-xh-dif">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="82" height="160"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title=" "/>
|
||||||
|
<connections>
|
||||||
|
<action selector="onSubViewClcik:" destination="-1" eventType="touchUpInside" id="PZc-UN-Jc3"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<accessibility key="accessibilityConfiguration">
|
||||||
|
<accessibilityTraits key="traits" button="YES"/>
|
||||||
|
</accessibility>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="160" id="auE-6N-CzV"/>
|
<constraint firstAttribute="height" constant="160" id="auE-6N-CzV"/>
|
||||||
<constraint firstAttribute="width" constant="90" id="jbq-fQ-8DY"/>
|
<constraint firstAttribute="width" constant="90" id="jbq-fQ-8DY"/>
|
||||||
@ -62,6 +80,15 @@
|
|||||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xNk-te-p3c">
|
||||||
|
<rect key="frame" x="4" y="0.0" width="82" height="160"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title=" "/>
|
||||||
|
<connections>
|
||||||
|
<action selector="onSubViewClcik:" destination="-1" eventType="touchUpInside" id="1iJ-2y-Kiy"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@ -80,6 +107,15 @@
|
|||||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bzt-Ez-WZQ">
|
||||||
|
<rect key="frame" x="4" y="0.0" width="82" height="160"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title=" "/>
|
||||||
|
<connections>
|
||||||
|
<action selector="onSubViewClcik:" destination="-1" eventType="touchUpInside" id="49R-TA-l5o"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@ -98,6 +134,15 @@
|
|||||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6Uv-u2-Pqq">
|
||||||
|
<rect key="frame" x="4" y="0.0" width="82" height="160"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title=" "/>
|
||||||
|
<connections>
|
||||||
|
<action selector="onSubViewClcik:" destination="-1" eventType="touchUpInside" id="wEo-2D-Uwu"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@ -116,6 +161,15 @@
|
|||||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qab-02-i9Q">
|
||||||
|
<rect key="frame" x="4" y="0.0" width="82" height="160"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title=" "/>
|
||||||
|
<connections>
|
||||||
|
<action selector="onSubViewClcik:" destination="-1" eventType="touchUpInside" id="WnJ-3L-lmf"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
@ -134,6 +188,15 @@
|
|||||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
|
<button hidden="YES" opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="o25-iM-e3X">
|
||||||
|
<rect key="frame" x="4" y="0.0" width="82" height="160"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<state key="normal" title="Button"/>
|
||||||
|
<buttonConfiguration key="configuration" style="plain" title=" "/>
|
||||||
|
<connections>
|
||||||
|
<action selector="onSubViewClcik:" destination="-1" eventType="touchUpInside" id="EUB-Uu-Yt0"/>
|
||||||
|
</connections>
|
||||||
|
</button>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user