203 lines
8.4 KiB
Objective-C
203 lines
8.4 KiB
Objective-C
//
|
|
// Created by Jesse Squires
|
|
// http://www.jessesquires.com
|
|
//
|
|
//
|
|
// Documentation
|
|
// http://cocoadocs.org/docsets/JSQMessagesViewController
|
|
//
|
|
//
|
|
// GitHub
|
|
// https://github.com/jessesquires/JSQMessagesViewController
|
|
//
|
|
//
|
|
// License
|
|
// Copyright (c) 2014 Jesse Squires
|
|
// Released under an MIT license: http://opensource.org/licenses/MIT
|
|
//
|
|
//
|
|
// Ideas for springy collection view layout taken from Ash Furrow
|
|
// ASHSpringyCollectionView
|
|
// https://github.com/AshFurrow/ASHSpringyCollectionView
|
|
//
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
@class JSQMessagesCollectionView;
|
|
|
|
|
|
/**
|
|
* A constant that describes the default height for all label subviews in a `JSQMessagesCollectionViewCell`.
|
|
*
|
|
* @see JSQMessagesCollectionViewCell.
|
|
*/
|
|
FOUNDATION_EXPORT const CGFloat kJSQMessagesCollectionViewCellLabelHeightDefault;
|
|
|
|
/**
|
|
* A constant that describes the default size for avatar images in a `JSQMessagesCollectionViewFlowLayout`.
|
|
*/
|
|
FOUNDATION_EXPORT const CGFloat kJSQMessagesCollectionViewAvatarSizeDefault;
|
|
|
|
|
|
|
|
/**
|
|
* The `JSQMessagesCollectionViewFlowLayout` is a concrete layout object that inherits
|
|
* from `UICollectionViewFlowLayout` and organizes message items in a vertical list.
|
|
* Each `JSQMessagesCollectionViewCell` in the layout can display messages of arbitrary sizes and avatar images,
|
|
* as well as metadata such as a timestamp and sender.
|
|
* You can easily customize the layout via its properties or its delegate methods
|
|
* defined in `JSQMessagesCollectionViewDelegateFlowLayout`.
|
|
*
|
|
* @see JSQMessagesCollectionViewDelegateFlowLayout.
|
|
* @see JSQMessagesCollectionViewCell.
|
|
*/
|
|
@interface JSQMessagesCollectionViewFlowLayout : UICollectionViewFlowLayout
|
|
|
|
/**
|
|
* The collection view object currently using this layout object.
|
|
*/
|
|
|
|
// TODO: fix, rename "messagesCollectionView", see #920
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wincompatible-property-type"
|
|
@property (readonly, nonatomic) JSQMessagesCollectionView *collectionView;
|
|
#pragma clang diagnostic pop
|
|
|
|
/**
|
|
* Specifies whether or not the layout should enable spring behavior dynamics for its items using `UIDynamics`.
|
|
*
|
|
* @discussion The default value is `NO`, which disables "springy" or "bouncy" items in the layout.
|
|
* Set to `YES` if you want items to have spring behavior dynamics. You *must* set this property from `viewDidAppear:`
|
|
* in your `JSQMessagesViewController` subclass.
|
|
*
|
|
* @warning Though this feature is mostly stable, it is still considered an experimental feature.
|
|
*/
|
|
@property (assign, nonatomic) BOOL springinessEnabled;
|
|
|
|
/**
|
|
* Specifies the degree of resistence for the "springiness" of items in the layout.
|
|
* This property has no effect if `springinessEnabled` is set to `NO`.
|
|
*
|
|
* @discussion The default value is `1000`. Increasing this value increases the resistance, that is, items become less "bouncy".
|
|
* Decrease this value in order to make items more "bouncy".
|
|
*/
|
|
@property (assign, nonatomic) NSUInteger springResistanceFactor;
|
|
|
|
/**
|
|
* Returns the width of items in the layout.
|
|
*/
|
|
@property (readonly, nonatomic) CGFloat itemWidth;
|
|
|
|
/**
|
|
* The font used to display the body a text message in the message bubble of each
|
|
* `JSQMessagesCollectionViewCell` in the collectionView.
|
|
*
|
|
* @discussion The default value is the preferred system font for `UIFontTextStyleBody`. This value must not be `nil`.
|
|
*/
|
|
@property (strong, nonatomic) UIFont *messageBubbleFont;
|
|
|
|
/**
|
|
* The horizontal spacing used to lay out the `messageBubbleContainerView` frame within each `JSQMessagesCollectionViewCell`.
|
|
* This container view holds the message bubble image and message contents of a cell.
|
|
*
|
|
* This value specifies the horizontal spacing between the `messageBubbleContainerView` and
|
|
* the edge of the collection view cell in which it is displayed. That is, the edge that is opposite the avatar image.
|
|
*
|
|
* @discussion The default value is `40.0f` on iPhone and `240.0f` on iPad. This value must be positive.
|
|
* For *outgoing* messages, this value specifies the amount of spacing from the left most
|
|
* edge of the collectionView to the left most edge of a message bubble within a cell.
|
|
*
|
|
* For *incoming* messages, this value specifies the amount of spacing from the right most
|
|
* edge of the collectionView to the right most edge of a message bubble within a cell.
|
|
*
|
|
* @warning This value may not be exact when the layout object finishes laying out its items, due to the constraints it must satisfy.
|
|
* This value should be considered more of a recommendation or suggestion to the layout, not an exact value.
|
|
*
|
|
* @see JSQMessagesCollectionViewCellIncoming.
|
|
* @see JSQMessagesCollectionViewCellOutgoing.
|
|
*/
|
|
@property (assign, nonatomic) CGFloat messageBubbleLeftRightMargin;
|
|
|
|
/**
|
|
* The inset of the frame of the text view within the `messageBubbleContainerView` of each `JSQMessagesCollectionViewCell`.
|
|
* The inset values should be positive and are applied in the following ways:
|
|
*
|
|
* 1. The right value insets the text view frame on the side adjacent to the avatar image
|
|
* (or where the avatar would normally appear). For outgoing messages this is the right side,
|
|
* for incoming messages this is the left side.
|
|
*
|
|
* 2. The left value insets the text view frame on the side opposite the avatar image
|
|
* (or where the avatar would normally appear). For outgoing messages this is the left side,
|
|
* for incoming messages this is the right side.
|
|
*
|
|
* 3. The top value insets the top of the frame.
|
|
*
|
|
* 4. The bottom value insets the bottom of the frame.
|
|
*
|
|
* @discussion The default value is `{0.0f, 0.0f, 0.0f, 6.0f}`.
|
|
*
|
|
* @warning Adjusting this value is an advanced endeavour and not recommended.
|
|
* You will only need to adjust this value should you choose to provide your own bubble image assets.
|
|
* Changing this value may also require you to manually calculate the itemSize for each cell
|
|
* in the layout by overriding the delegate method `collectionView:layout:sizeForItemAtIndexPath:`
|
|
*/
|
|
@property (assign, nonatomic) UIEdgeInsets messageBubbleTextViewFrameInsets;
|
|
|
|
/**
|
|
* The inset of the text container's layout area within the text view's content area in each `JSQMessagesCollectionViewCell`.
|
|
* The specified inset values should be positive.
|
|
*
|
|
* @discussion The default value is `{7.0f, 14.0f, 7.0f, 14.0f}`.
|
|
*
|
|
* @warning Adjusting this value is an advanced endeavour and not recommended.
|
|
* You will only need to adjust this value should you choose to provide your own bubble image assets.
|
|
* Changing this value may also require you to manually calculate the itemSize for each cell
|
|
* in the layout by overriding the delegate method `collectionView:layout:sizeForItemAtIndexPath:`
|
|
*/
|
|
@property (assign, nonatomic) UIEdgeInsets messageBubbleTextViewTextContainerInsets;
|
|
|
|
/**
|
|
* The size of the avatar image view for incoming messages.
|
|
*
|
|
* @discussion The default value is `(30.0f, 30.0f)`. Set to `CGSizeZero` to remove incoming avatars.
|
|
* You may use `kJSQMessagesCollectionViewAvatarSizeDefault` to size your avatars to the default value.
|
|
*/
|
|
@property (assign, nonatomic) CGSize incomingAvatarViewSize;
|
|
|
|
/**
|
|
* The size of the avatar image view for outgoing messages.
|
|
*
|
|
* @discussion The default value is `(30.0f, 30.0f)`. Set to `CGSizeZero` to remove outgoing avatars.
|
|
* You may use `kJSQMessagesCollectionViewAvatarSizeDefault` to size your avatars to the default value.
|
|
*/
|
|
@property (assign, nonatomic) CGSize outgoingAvatarViewSize;
|
|
|
|
/**
|
|
* The maximum number of items that the layout should keep in its cache of layout information.
|
|
*
|
|
* @discussion The default value is `200`. A limit of `0` means no limit. This is not a strict limit.
|
|
*/
|
|
@property (assign, nonatomic) NSUInteger cacheLimit;
|
|
|
|
/**
|
|
* Computes and returns the size of the `messageBubbleImageView` property of a `JSQMessagesCollectionViewCell`
|
|
* at the specified indexPath. The returned size contains the required dimensions to display the entire message contents.
|
|
* Note, this is *not* the entire cell, but only its message bubble.
|
|
*
|
|
* @param indexPath The index path of the item to be displayed.
|
|
*
|
|
* @return The size of the message bubble for the item displayed at indexPath.
|
|
*/
|
|
- (CGSize)messageBubbleSizeForItemAtIndexPath:(NSIndexPath *)indexPath;
|
|
|
|
/**
|
|
* Computes and returns the size of the item specified by indexPath.
|
|
*
|
|
* @param indexPath The index path of the item to be displayed.
|
|
*
|
|
* @return The size of the item displayed at indexPath.
|
|
*/
|
|
- (CGSize)sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
|
|
|
|
@end
|